In MySQL werden sowohl IN als auch EXISTS in Abfragen verwendet, um Daten basierend auf dem Vorhandensein von Zeilen in einer Unterabfrage zu filtern. Sie funktionieren jedoch auf unterschiedliche Weise und die Wahl zwischen ihnen kann sich auf die Abfrageleistung auswirken. Lassen Sie uns ihre Unterschiede anhand von Erklärungen und praktischen Beispielen aufschlüsseln.
Beschreibung:
Mit der IN-Klausel werden Zeilen danach gefiltert, ob der Wert einer Spalte mit einem Wert in einer Liste oder einer Unterabfrage übereinstimmt. Es sucht nach übereinstimmenden Werten aus der inneren Abfrage und vergleicht sie mit der äußeren Abfrage.
Leistung:
Die IN-Klausel ist im Allgemeinen effizient, wenn die Unterabfrage eine kleine Anzahl von Datensätzen zurückgibt. Wenn die Unterabfrage jedoch einen großen Datensatz zurückgibt, kann IN langsamer werden.
Syntax:
SELECT columns FROM table WHERE column IN (subquery);
Beschreibung:
Die EXISTS-Klausel prüft, ob von einer Unterabfrage zurückgegebene Zeilen vorhanden sind. Wenn die Unterabfrage eine Zeile zurückgibt, ergibt EXISTS TRUE und die äußere Abfrage wird fortgesetzt. Dabei kommt es nicht auf den Inhalt der Zeilen an, sondern nur darauf, ob die Zeilen vorhanden sind.
Leistung:
EXISTS ist bei großen Datensätzen in der Regel schneller, da die Verarbeitung gestoppt wird, sobald eine Übereinstimmung gefunden wird. Dies macht es effizient bei der Arbeit mit Unterabfragen, die viele Zeilen zurückgeben.
Syntax:
SELECT columns FROM table WHERE EXISTS (subquery);
Betrachten wir zwei Tabellen: Kunden und Bestellungen.
customer_id | customer_name |
---|---|
1 | John Doe |
2 | Jane Smith |
3 | Alice Brown |
order_id | customer_id | order_total |
---|---|---|
1 | 1 | 200 |
2 | 1 | 150 |
3 | 2 | 300 |
We want to find all customers who have placed at least one order.
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
Return Values:
Efficiency:
Use Case:
Assume we have:
Query with IN:
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Query with EXISTS:
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Das obige ist der detaillierte Inhalt vonIN vs. EXISTS in SQL: Leistung und Nutzung verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!