Grundlegende Verwendung von exists, in und any in MySQL

Grundlegende Verwendung von exists, in und any in MySQL

【1】existiert

Verwenden Sie eine Schleife, um die externe Tabelle nacheinander abzufragen, und überprüfen Sie für jede Abfrage die vorhandene bedingte Anweisung.

Wenn die bedingte Anweisung in exists eine Zeile mit Datensätzen zurückgeben kann (unabhängig davon, wie viele Zeilen vorhanden sind, solange sie zurückgegeben werden können), ist die Bedingung erfüllt und der Datensatz wird zurückgegeben, zu dem die aktuelle Schleife führt. Im Gegenteil, wenn die bedingte Anweisung in „exists“ keine Datensatzzeile zurückgeben kann, ist die Bedingung falsch und der Datensatz, zu dem die Schleife führt, wird verworfen.

Die Bedingung „Existiert“ ist wie eine Boolesche Bedingung. Sie ist 1, wenn ein Ergebnissatz zurückgegeben werden kann, und 0, wenn kein Ergebnissatz zurückgegeben werden kann.

Das Syntaxformat ist wie folgt:

Wählen Sie * aus Tabellenname, wobei [nicht] existiert (Auswählen..);

Hier ist ein Beispiel:

wähle * aus p_user_2 
wobei EXISTIERT(select * from p_user where id=12)

Wenn in der Tabelle p_user ein Datensatz mit der ID 12 vorhanden ist, werden alle Datensätze in der Tabelle p_user_2 zurückgegeben. Andernfalls sind die zurückgegebenen Datensätze leer.

Wenn nicht vorhanden, wird das Gegenteil vom oben genannten getan.

Wenn Tabelle A n Datensätze enthält, besteht die Exist-Abfrage im Allgemeinen darin, diese n Datensätze einzeln herauszunehmen und dann n-mal den Exist-Zustand zu beurteilen.

【2】in

Das Syntaxformat ist wie folgt:

Wählen Sie * aus A, wobei die Spalte in (Spalte aus B auswählen) ist;

Es ist zu beachten, dass in „where“ die Spalte eine Spalte von A ist und die entsprechende Unterabfrageanweisung in einen Ergebnissatz mit einer Spalte und mehreren Zeilen zurückgibt.

Beachten Sie, dass das von der entsprechenden Select-Anweisung zurückgegebene Ergebnis eine Spalte sein muss! Kann aus mehreren Zeilen bestehen.

Hier ist ein Beispiel:

wähle * von p_user_2, wobei id [nicht] in (wähle id von p_user)

Fragen Sie den Datensatz von p_user_2 ab, dessen ID sich im ID-Satz der p_user-Tabelle befindet. nicht drin ist das Gegenteil.

【3】Die Beziehung zwischen existiert und in

Nachdem das SQL geändert wurde, können beide das gleiche Ziel erreichen:

wähle * aus p_user_2 
wobei ID [nicht] in (Wählen Sie ID aus p_user aus);

wähle * aus p_user_2 
wobei [nicht] EXISTIERT (wähle ID aus p_user, wobei ID = p_user_2.id)

Wann sollten wir also „exists“ oder „in“ verwenden?

**Wenn die beiden abgefragten Tabellen eine ähnliche Größe haben, macht die Verwendung von „in“ und „exists“ kaum einen Unterschied. **

**Wenn eine der beiden Tabellen kleiner und die andere größer ist, besteht use für die größere Unterabfragetabelle und in für die kleinere Unterabfragetabelle: **

Beispiel: Tisch A (kleiner Tisch), Tisch B (großer Tisch)

① Die Unterabfragetabelle ist Tabelle B:

wähle * aus A 
wobei cc in (cc aus B auswählen) 
//Geringe Effizienz, Verwendung des Index der Spalte cc in Tabelle A;
 
wähle * aus A 
wo existiert (wähle cc aus B, wobei cc=A.cc) 
//Hohe Effizienz durch Verwendung des Index der Spalte cc in Tabelle B. 

② Die Unterabfragetabelle ist Tabelle A:

wähle * aus B 
wobei cc in (cc aus A auswählen) 
//Hohe Effizienz, indem der Index der Spalte cc in Tabelle B verwendet wird;
 
wähle * aus B 
wo existiert (wähle cc aus A, wobei cc=B.cc) 
//Geringe Effizienz, Verwendung des Index der Spalte cc in Tabelle A.

Wenn die Abfrageanweisung „not in“ verwendet, werden sowohl die inneren als auch die äußeren Tabellen vollständig durchsucht und der Index wird nicht verwendet. Die Unterabfrage von „not exists“ kann jedoch weiterhin den Index der Tabelle verwenden.

**Unabhängig davon, welche Tabelle größer ist, ist die Verwendung von „not exists“ schneller als die Verwendung von „not in“. **

【4】irgendein/einige/alle

① any, in, some, all sind jeweils eines der Unterabfrageschlüsselwörter

„any“ kann in Kombination mit =, >, >=, <, <= und <> verwendet werden, um „gleich“, „größer als“, „größer oder gleich“, „kleiner als“, „kleiner oder gleich“ und „ungleich“ den Daten darzustellen.

„all“ kann in Kombination mit =, >, >=, <, <= und <> verwendet werden, um alle Daten im Bereich „gleich“, „größer als“, „größer oder gleich“, „kleiner als“, „kleiner oder gleich“ und „ungleich“ darzustellen.

Ihre Syntax für Unterabfragen lautet wie folgt:

Operandvergleichsoperator beliebig (Unterabfrage);
Operand in (Unterabfrage);
Operand coparison_operator einige (Unterabfrage);
Operandvergleichsoperator alle (Unterabfrage);

Die Schlüsselwörter any und all müssen mit einem Vergleichsoperator verwendet werden.

② Das Schlüsselwort any kann wie folgt verstanden werden: „Wenn das Vergleichsergebnis wahr ist, gib für jeden Wert in der von der Unterabfrage zurückgegebenen Spalte true zurück.“

Zum Beispiel:

Wählen Sie das Alter aus t_user, wobei Alter > beliebig ist (wählen Sie das Alter aus t_user_copy);

Angenommen, es gibt eine Zeile in der Tabelle t_user, die (10) enthält, und t_user_copy enthält (21,14,6), dann ist der Ausdruck wahr; wenn t_user_copy (20,10) enthält oder die Tabelle t_user_copy leer ist, ist der Ausdruck falsch. Wenn die Tabelle t_user_copy (null, null, null) enthält, ist der Ausdruck unbekannt.

all bedeutet „für alle Werte in der von der Unterabfrage zurückgegebenen Spalte, wenn der Vergleich als wahr ausgewertet wird, wird true zurückgegeben“

Zum Beispiel:

Wählen Sie das Alter aus t_user, wobei Alter > alles (wählen Sie das Alter aus t_user_copy);

Angenommen, es gibt in der Tabelle t_user eine Zeile mit (10). Wenn die Tabelle t_user_copy (-5, 0, +5) enthält, ist der Ausdruck wahr, da 10 größer ist als alle drei in t_user_copy gefundenen Werte. Wenn die Tabelle t_user_copy (12, 6, null, -100) enthält, ist der Ausdruck falsch, da in t_user_copy ein Wert 12 vorhanden ist, der größer als 10 ist. Wenn die Tabelle t_user_copy (0, null, 1) enthält, ist der Ausdruck unbekannt. Wenn t_user_copy eine leere Tabelle ist, ist das Ergebnis „true“.

③ nicht in /in

„not in“ ist ein Alias ​​für „<>all“ und hat die gleiche Verwendung.

Die Anweisung in ist identisch mit „=any“.

Zum Beispiel:

wähle s1 aus t1, wobei s1 = beliebig (wähle s1 aus t2);
wähle s1 aus t1, wobei s1 in (wähle s1 aus t2);

Die Anweisung some ist ein Alias ​​von any und wird auf die gleiche Weise verwendet.

Zum Beispiel:

wähle s1 aus t1, wobei s1 <> beliebig (wähle s1 aus t2);
wähle s1 aus t1, wobei s1 <> einige (wähle s1 aus t2);

In der obigen Abfrage ist „some“ leicht als „irgendein s1 in Tabelle t1 ist nicht gleich s1 in Tabelle t2“ zu verstehen. Diese Aussage ist falsch, wenn sie als „any“ interpretiert wird.

Zusammenfassen

Dies ist das Ende dieses Artikels über die grundlegende Verwendung von exists, in und any in MySQL. Weitere relevante MySQL-Inhalte zu exists, in und any 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:
  • Vergleich der Verwendung von EXISTS und IN in MySQL
  • Einführung in die Verwendung und den Unterschied zwischen „in“ und „exists“ in MySQL
  • Vergleichende Analyse von IN und Exists in MySQL-Anweisungen
  • MySQL existiert und in detaillierter Erklärung und Unterschied
  • Zusammenfassung der Unterschiede zwischen In-Query und Exist-Query in MySQL
  • MYSQL IN- und EXISTS-Optimierungsbeispiele
  • mysql nicht drin, linker Join, IST NULL, EXISTIERT NICHT Effizienzproblem-Datensatz
  • Detaillierte Erklärung des Unterschieds zwischen in und exists in MySQL

<<:  Beispielcode zum Erzielen eines Aushöhlungseffekts mit reinem CSS

>>:  Docker-Speicherüberwachung und Stresstestmethoden

Artikel empfehlen

Docker installiert MySQL und löst das chinesische verstümmelte Problem

Inhaltsverzeichnis 1. Ziehen Sie das MySQL-Image ...

Installations-Tutorial zur dekomprimierten Version von MySQL5.7.21 unter Win10

Installieren Sie die entpackte Version von Mysql ...

Einführung in den HTML-Standard für chinesische Zeichenkodierung

In HTML müssen Sie die von der Webseite verwendet...

Vue implementiert Dialogkapselung

Inhaltsverzeichnis Vue2-Schreiben Schreiben der V...

HTML-Hyperlinks im Detail erklärt

Hyperlink Hyperlinks sind die am häufigsten verwen...

Tutorial zu HTML-Tabellen-Tags (12): Rahmenstil-Attribut FRAME

Verwenden Sie die FRAME-Eigenschaft, um den Stilt...

JQuery implementiert das Ausblenden und Anzeigen von Animationseffekten

In diesem Artikel wird der spezifische Code von J...

Detailliertes Tutorial zur Installation von Prometheus mit Docker

Inhaltsverzeichnis 1. Node Exporter installieren ...