MySqls Unterabfrage ist ein wichtiger Teil der Mehrtabellenabfrage. Sie wird oft zusammen mit der Join-Abfrage verwendet und ist die Grundlage der Mehrtabellenabfrage. Der folgende Artikel führt Sie durch die Unterabfrage und ich hoffe, er ist hilfreich für Sie.
Was ist eine Unterabfrage?
Unterabfrage, auch interne Abfrage genannt. Wenn eine Abfrage eine Bedingung einer anderen Abfrage ist, wird sie als Unterabfrage bezeichnet. Unterabfragen können mehrere einfache Befehle verwenden, um leistungsstarke zusammengesetzte Befehle zu erstellen. Unterabfragen werden am häufigsten in der WHERE-Klausel eines SELECT-SQL-Befehls verwendet.
Eine Unterabfrage ist eine SELECT-Anweisung, die in einer SELECT-, SELECT…INTO-Anweisung, INSERT…INTO-Anweisung, DELETE-Anweisung oder UPDATE-Anweisung oder in einer anderen Unterabfrage verschachtelt ist.
2. Unterabfrageklassifizierung
Die Unterabfrage ist in die folgenden Kategorien unterteilt:
1 -query: return Ein einwertiger Skalar in seiner einfachsten Form.
2. Spaltenunterabfrage: Die zurückgegebene Ergebnismenge besteht aus N Zeilen und einer Spalte.
3. Zeilenunterabfrage: Die zurückgegebene Ergebnismenge ist eine Zeile mit N Spalten.
4. Tabellenunterabfrage: Die zurückgegebene Ergebnismenge besteht aus N Zeilen und N Spalten.
Verwendbare Operatoren: = > < >= <= <> ANY IN SOME ALL EXISTS
Eine Unterabfrage gibt einen Skalar (nur einen Wert), eine Zeile, eine Spalte oder eine Tabelle zurück. Diese Unterabfragen werden Skalare, Zeile, Spalten- und Tabellenunterabfragen.
Wenn die Unterabfrage einen Skalarwert (nur einen Wert) zurückgibt, kann die äußere Abfrage die Symbole =, >, <, >=, <= und <> verwenden ; wenn die Unterabfrage keinen Skalarwert zurückgibt und die äußere Abfrage einen Vergleichsoperator verwendet, um das Ergebnis der Unterabfrage zu vergleichen, wird eine Ausnahme ausgelöst.
1. Skalare Unterabfrage:
bedeutet, dass die Unterabfrage einen Skalar mit einem einzelnen Wert, beispielsweise einer Zahl oder einer Zeichenfolge, zurückgibt und gleichzeitig die einfachste Unterabfrage ist. Rücksendeformular. Sie können = > < >= <= <>
diese Operatoren verwenden, um die Skalarergebnisse von Unterabfragen zu vergleichen. Normalerweise befindet sich die Position der Unterabfrage auf der rechten Seite des Vergleichsausdrucks
Beispiel:
SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1) SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2) SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)
2 . MySQL-Beispielabfrage:
bedeutet, dass die von der Unterabfrage zurückgegebene Ergebnismenge aus N Zeilen und einer Spalte besteht. Die Ergebnisse werden normalerweise von einer Abfrage in einem bestimmten Feld der Tabelle zurückgegeben.
Sie können diese Operatoren = > < >= <= <>
verwenden, um die Skalarergebnisse von Unterabfragen zu vergleichen. Normalerweise befindet sich die Position der Unterabfrage auf der rechten Seite der Vergleichsformel.
Sie können IN
verwenden Die Operatoren ANY
, SOME
und ALL
können nicht direkt verwendet werden. = > < >= <= <>
Operatoren, die Skalarergebnisse vergleichen, können nicht direkt verwendet werden.
Beispiel:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2) SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
NOT IN ist ein Alias von <>
Sonderfall:
Wenn Tabelle2 eine leere Tabelle ist, ist das Ergebnis nach ALL TRUE;
Wenn die Unterabfrage etwa (0,NULL,1) zurückgibt, ist dies der Fall ist ungeachtet Wenn s1 größer als die zurückgegebenen Ergebnisse ist, aber leere Zeilen vorhanden sind, ist das Ergebnis nach ALL UNKNOWN.
Hinweis: Für den Fall einer leeren Tabelle in Tabelle2 geben die folgenden Anweisungen NULL zurück:
SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2) SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
3. MySQL-Zeilenunterabfrage:
finger The Die von der Abfrage zurückgegebene Ergebnismenge ist eine Zeile mit N Spalten. Das Ergebnis der Unterabfrage ist normalerweise die Ergebnismenge, die durch die Abfrage einer bestimmten Datenzeile in der Tabelle zurückgegeben wird.
Beispiel:
SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2) //注:(1,2) 等同于 row(1,2) SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)
4. MySQL-Tabellenunterabfrage:
bedeutet, dass die von der Unterabfrage zurückgegebene Ergebnismenge Tabellendaten mit N Zeilen ist N Spalten.
Beispiel:
SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)
Das obige ist der detaillierte Inhalt vonWas ist eine MySQL-Unterabfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!