1. Verwendung:(1) EXISTS-Nutzung Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wo EXISTIERT (wählen Sie b.id aus ucsc_project b, wo a.projectId = b.id) Das obige SQL bedeutet: Fragen Sie die Felder batchName und projectId mit ucsc_project_batch als Haupttabelle ab, wobei das Feld projectId in der Tabelle ucsc_project vorhanden ist. EXISTS führt eine Schleifenabfrageübereinstimmung für die äußere Tabelle ucsc_project_batch aus. Dabei ist es egal, was der Rückgabewert der Unterabfrage der inneren Tabelle ist, sondern nur, ob es einen Rückgabewert gibt. Wenn es einen Rückgabewert gibt, ist die Bedingung erfüllt, die Daten wurden erfolgreich abgeglichen und dem Abfrageergebnissatz hinzugefügt; wenn es keinen Rückgabewert gibt, ist die Bedingung falsch und die Daten werden verworfen. Wenn wir beispielsweise das Abfragerückgabefeld der ersten Abfrage ändern, hat dies keine Auswirkungen auf das Abfrageergebnis der äußeren Abfrage: Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wo EXISTIERT (wählen Sie b.companyId,b.name aus ucsc_project b, wo a.projectId = b.id) (2) IN-Verwendung Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wobei a.projectId in (wählen Sie b.id aus ucsc_project b) Das Abfrageergebnis des obigen SQL ist dasselbe wie das Ergebnis von EXISTS gerade, und die Bedeutung der Abfrage ist auch dieselbe. 2. Hinweis:(1) Beim Schreiben von EXISTS muss darauf geachtet werden, dass die Bedingungsanweisung in der Unterabfrage grundsätzlich mit der Tabelle der äußeren Abfrage verknüpft sein muss. Andernfalls kann die Bedingung der Unterabfrage immer wahr oder immer falsch sein. Beim zyklischen Abgleichen der äußeren Abfragetabelle werden entweder alle Ergebnisse gefunden oder keines. Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wo EXISTIERT (wählen Sie b.id aus ucsc_project b) Da beispielsweise in der obigen Schreibmethode die Tabelle ucsc_project Werte enthält, ist die Bedingung der Unterabfrage immer wahr. Wenn alle Daten von ucsc_project_batch in einer Schleife abgeglichen werden, kann dies erfolgreich erfolgen und das Abfrageergebnis werden zu den Daten der gesamten Tabelle ucsc_project_batch. Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wo EXISTIERT (wählen Sie b.id aus ucsc_project b, wo b.id null ist) Auf diese Weise findet die Unterabfrage definitiv keine Ergebnisse, sodass die Bedingung der Unterabfrage falsch ist, die einzelnen Daten in der äußeren Abfrage nicht übereinstimmen und das gesamte Abfrageergebnis leer ist. (2) Für die Anzahl der Parameter in der IN-Anweisung in MySQL gibt es keine Begrenzung. Für SQL-Anweisungen in MySQL gibt es jedoch eine Längenbeschränkung. Die maximale Länge der gesamten Anweisung beträgt 4 MB. (3) Die Unterabfrageanweisung EXISTS kümmert sich nicht darum, was abgefragt wird, sondern nur darum, ob ein Ergebnissatz vorhanden ist. Wenn dies der Fall ist, kann die gesamte Unterabfrage als Anweisung mit einer wahren Bedingung betrachtet werden, andernfalls handelt es sich um eine Anweisung mit einer falschen Bedingung. (4) Die IN-Anweisung kann für die Unterabfrage nur ein Feld zurückgeben, sonst wird ein Fehler gemeldet:
3. SzenenauswahlWenn die äußere Abfragetabelle groß und die Unterabfragetabelle klein ist, wählen Sie „IN“ aus. Wenn die äußere Abfragetabelle klein und die Unterabfragetabelle groß ist, wählen Sie „EXISTS“ aus. Wenn die beiden Tabellen eine ähnliche Größe haben, sind sie ähnlich. (1) Die SQL-Abfrage in IN wird nur einmal abgefragt, dann wird der Ergebnissatz in einer temporären Datei gespeichert und dann mit der SQL der äußeren Abfrage abgeglichen. Sowohl die äußere Abfrage als auch die Unterabfrage können Indizes verwenden. Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wobei a.projectId in (wählen Sie b.id aus ucsc_project b) ist gleichbedeutend mit: $ergebnis = []; $ucsc_project_batch = "Wählen Sie einen Batchnamen und eine Projekt-ID aus ucsc_project_batch a"; $ucsc_project = "wähle b.id aus ucsc_project b"; für($i = 0;$i < $ucsc_project_batch .length;$i++){ für($j = 0;$j < $ucsc_project.length;$j++){ wenn($ucsc_project_batch[$i].projectId== $ucsc_project[$j].id){ $result[] = $ucsc_project_batch[$i]; brechen; } } } (2) EXISTS führt eine Schleife mit der externen Abfragetabelle ucsc_project_batch aus und führt ucsc_project_batch.length-mal aus. Die Unterabfrage kann den Index verwenden und die externe Abfrage durchsucht die gesamte Tabelle. Wählen Sie a.batchName,a.projectId aus ucsc_project_batch a, wo EXISTIERT (wählen Sie b.id aus ucsc_project b, wo a.projectId = b.id) ist gleichbedeutend mit: $ergebnis = []; $ucsc_project_batch = "Wählen Sie einen Batchnamen und eine Projekt-ID aus ucsc_project_batch a"; für ($i = 0; $i < $ucsc_project_batch . Länge; $i++) { if (exists($ucsc_project_batch [$i] . projectId)) {//Führen Sie select b.id from ucsc_project b aus, wobei a.projectId=b.id $result[] = $ucsc_project_batch[$i]; } } Durch die Analyse der beiden Pseudocodes können wir Folgendes erkennen: Wenn die Unterabfragetabelle groß ist, kann die Verwendung von EXISTS die Gesamtzahl der Schleifen effektiv reduzieren und so die Geschwindigkeit verbessern. Wenn die äußere Abfragetabelle groß ist, kann die Verwendung von IN die Schleifendurchquerung der äußeren Abfragetabelle effektiv reduzieren und so die Geschwindigkeit verbessern. ZusammenfassenDies ist das Ende dieses Artikels über den Vergleich der Verwendung von EXISTS und IN in MySQL. Weitere relevante MySQL EXISTS- und IN-Vergleichsinhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: jQuery verwendet das Canvas-Tag, um den Bestätigungscode zu zeichnen
>>: Eine Zusammenfassung detaillierter Einblicke in den Import von CSS
Nach der Installation der MySQL-Datenbank mit der...
Da ich dieses Plugin beim Schreiben einer Demo ve...
Wir sehen oft einen coolen Effekt, wenn die Maus ...
Durchführung von Prozessanalysen (1) Wie rufe ich...
Ich möchte eine Situation erreichen, in der die B...
Ich habe es Ihnen bereits vorgestellt: Docker (Be...
Batchkommentare in SQL Server Batch-Annotation St...
1. Transaktionsmerkmale (ACID) (1) Atomarität. Di...
Einführung: Die Konfiguration von Docker, auf dem...
Inhaltsverzeichnis Vorwort Analyse und Lösung des...
Inhaltsverzeichnis 1. Docker ermöglicht Fernzugri...
Aufgezeichnetes MySQL 5.7.9-Installationstutorial...
Inhaltsverzeichnis Vorwort XA-Protokoll So implem...
1. Schreiben Sie ein Split-Skript (splitNginxLog....
Inhaltsverzeichnis EffectList-Sammlung Effektlist...