Intern
Was ist der Unterschied zwischen einer Unterabfrage in WHERE id IN (SELECT ...) und einer Unterabfrage mit WHERE EXISTS (SELECT ...)? IN vergleicht die Werte mit einem Ergebnis-Set, EXISTS prüft, ob mindestens eine Zeile vorhanden ist IN wird für jede Zeile der äußeren Abfrage ausgeführt, EXISTS einmal Es gibt keinen Unterschied IN funktioniert nur mit Zahlen, EXISTS mit allen Datentypen
sobes.tech KI
Antwort von AI
Richtige Antwort: IN vergleicht Werte mit einem Ergebnissatz, EXISTS prüft, ob mindestens eine Zeile vorhanden ist.
Die Unterabfrage mit IN gibt Zeilen zurück, bei denen der Wert mit einem der von der Unterabfrage zurückgegebenen Werte übereinstimmt. Die Unterabfrage mit EXISTS prüft, ob mindestens eine Zeile existiert, die die Bedingung erfüllt.
Unterschiede:
- IN vergleicht konkrete Werte, EXISTS prüft die Existenz von Zeilen.
- EXISTS ist oft effizienter bei der Existenzprüfung, insbesondere bei komplexen Bedingungen.
Beispiel:
SELECT * FROM orders o
WHERE o.customer_id IN (SELECT c.id FROM customers c WHERE c.status = 'active');
SELECT * FROM orders o
WHERE EXISTS (SELECT 1 FROM customers c WHERE c.id = o.customer_id AND c.status = 'active');
Beide Abfragen wählen Bestellungen aktiver Kunden aus, funktionieren aber unterschiedlich.