Was ist der Unterschied zwischen dem EXISTS
y IN
Klausel in SQL?
Wann sollten wir die EXISTS
und wann sollten wir die IN
?
Was ist der Unterschied zwischen dem EXISTS
y IN
Klausel in SQL?
Wann sollten wir die EXISTS
und wann sollten wir die IN
?
Wenn Sie Folgendes verwenden können where in
代わりに where exists
entonces where in
ist wahrscheinlich schneller.
使用する where in
o where exists
durchläuft alle Ergebnisse des übergeordneten Ergebnisses. Der Unterschied hier ist, dass die where exists
wird eine Menge abhängiger Unterabfragen verursachen. Wenn Sie abhängige Unterabfragen verhindern können, dann where in
die bessere Wahl sein wird.
Beispiel
Angenommen, wir haben 10.000 Unternehmen mit jeweils 10 Benutzern (unsere Benutzertabelle hat also 100.000 Einträge). Nehmen wir nun an, Sie möchten einen Benutzer anhand seines Namens oder seines Firmennamens finden.
Die folgende Abfrage mit were exists
hat eine Ausführungszeit von 141ms:
select * from `users`
where `first_name` ='gates'
or exists
(
select * from `companies`
where `users`.`company_id` = `companies`.`id`
and `name` = 'gates'
)
Dies geschieht, weil für jeden Benutzer eine abhängige Unterabfrage ausgeführt wird:
Wenn wir jedoch die exist-Abfrage vermeiden und sie mit:
select * from `users`
where `first_name` ='gates'
or users.company_id in
(
select id from `companies`
where `name` = 'gates'
)
Dann werden abhängige Unterabfragen vermieden, und die Abfrage würde in 0,012 ms ausgeführt
Ich habe festgestellt, dass die Verwendung des EXISTS-Schlüsselworts oft sehr langsam ist (das gilt auch für Microsoft Access). Ich verwende stattdessen den Verknüpfungsoperator auf diese Weise: sollte-ich-das-schlüsselwort-vorhanden-in-sql verwenden
Ich glaube, darauf gibt es eine ganz einfache Antwort. Warum erkundigen Sie sich nicht bei den Leuten, die diese Funktion in ihren Systemen entwickelt haben?
Wenn Sie ein MS SQL-Entwickler sind, finden Sie hier die Antwort direkt von Microsoft.
IN
:
Ermittelt, ob ein angegebener Wert mit einem beliebigen Wert in einer Unterabfrage oder einer Liste übereinstimmt.
EXISTS
:
Gibt eine Unterabfrage an, die auf das Vorhandensein von Zeilen prüft.
Wenn eine Unterabfrage mehr als einen Wert zurückgibt, müssen Sie möglicherweise die äußere Abfrage ausführen, wenn die Werte in der in der Bedingung angegebenen Spalte mit einem Wert in der Ergebnismenge der Unterabfrage übereinstimmen. Um diese Aufgabe auszuführen, müssen Sie die in
Stichwort.
Sie können eine Unterabfrage verwenden, um zu prüfen, ob eine Reihe von Datensätzen existiert. Hierfür müssen Sie die exists
Klausel mit einer Unterabfrage. Die exists
Schlüsselwort immer den Wert true oder false zurück.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.