In MySQL stellt eine verschachtelte Abfrage eine Abfrage dar, die eine andere SELECT-Anweisung in der WHERE-Klausel oder HAVING-Klausel einer SELECT-Anweisung verschachtelt. Die Syntax lautet „SELECT-Anweisung WHERE-Bedingung (SELECT-Anweisung)“.
Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.
Verschachtelte Abfrage
Definition: Ein innerer Abfrageanweisungsblock (Select-from-where) kann in der Where-Klausel eines anderen äußeren Abfrageblocks verschachtelt werden, wobei die äußere Ebene ebenfalls aufgerufen wird die übergeordnete Abfrage, die Hauptabfrage. Innere Abfragen werden von Abfragen auch als Unterabfragen bezeichnet. Unterabfragen verwenden im Allgemeinen nicht die Order-by-Klausel und können nur die endgültigen Abfrageergebnisse sortieren.
Eine andere Definition: Eine Abfrage, die eine andere SELECT-Anweisung in der WHERE-Klausel oder HAVING-Klausel einer SELECT-Anweisung verschachtelt, wird als verschachtelte Abfrage bezeichnet, die auch als Unterabfrage bezeichnet wird.
Die Funktionsweise verschachtelter Abfragen ist: Die innere Abfrage wird zuerst verarbeitet und die äußere Abfrage verwendet die Ergebnisse der inneren Abfrage. Verschachtelte Abfragen können nicht nur in der SELECT-Anweisung der übergeordneten Abfrage verwendet werden. Es kann auch in INSERT-, UPDATE-, DELETE-Anweisungen oder anderen Unterabfragen verwendet werden.
1. Standardauswahlabfrage, die Standardauswahllistenkomponenten enthält.
2. Standard-From-Klausel, die einen oder mehrere Tabellen- oder Ansichtsnamen enthält.
3. Optionale where-Klausel.
4. Optionale Gruppierung nach-Klausel.
5. Optionale Have-Klausel.
1 Die Auswahlabfrage einer Unterabfrage wird immer in Klammern gesetzt.
2. Compute- oder for.browse-Klauseln können nicht enthalten sein.
3. Bei gleichzeitiger Angabe der Top-Klausel darf nur die Order-By-Klausel enthalten sein.
4. Unterabfragen können bis zu 32 Ebenen verschachtelt werden. Einige Abfragen unterstützen möglicherweise keine 32-Verschachtelungsebenen.
5. Unterabfragen können überall dort verwendet werden, wo ein Ausdruck verwendet werden kann, solange sie einen einzelnen Wert zurückgeben.
6. Wenn eine Tabelle nur in der Unterabfrage und nicht in der äußeren Abfrage erscheint, können die Spalten der Tabelle nicht in die Ausgabe einbezogen werden.
Wenn die Unterabfrage nur einen Wert zurückgibt, können Sie Vergleichsoperatoren wie =,, >=, <=, != usw. verwenden, um die Rich-Abfrage und die Unterabfrage zu verbinden . Beispiele sind wie folgt:
3.1 Einfache Unterabfrage
select name,age from person where age > ( select age from person where name = '张三');
3.2 wie verschachtelte Abfrage
select count(distinct(Tname)) --查询姓“张”的老师的个数 from Teacher where Tname like '张%';
Wenn die Unterabfrage mehr als einen Wert, aber eine Menge zurückgibt, kann sie nicht direkt verwendet werden Als Operator können Sie ANY, SOME oder ALL zwischen dem Vergleichsoperator und der Unterabfrage einfügen. Die Äquivalenzbeziehung kann den IN-Operator verwenden.
4.1 Das in verschachtelte Abfrage
in-Schlüsselwort wird in der where-Klausel verwendet, um zu bestimmen, ob sich der Abfrageausdruck in einer Liste mit mehreren Werten befindet. Gibt Datensätze zurück, die die Bedingungen in der In-Liste erfüllen.
select name from person where countryid in ( select countryid from country where countryname = '中国');
4.2 einige verschachtelte Abfragen
some ist ein logisches Operationssymbol in SQL. Wenn in einer Reihe von Vergleichen einige Werte wahr sind, ist das Ergebnis wahr. Die Syntax einiger ist:
select name from person where countryid = some ( select countryid from country --用等号和以下查询到的值比较,如果与其中一个相等,就返回 where countryname = '中国');
4.3 alle verschachtelten Abfragen
alle sind ein logischer Operator in SQL. Wenn eine Reihe von Vergleichen wahr ist, kann das Ergebnis wahr sein.
select name from person where countryid > all ( select countryid from country --当countryid大于以下返回的所有id,此结果才为True,此结果才返回 where countryname = '中国');
4.4 existiert eine verschachtelte Abfrage
exists ist ein logisches Operationssymbol in SQL. True, wenn die Unterabfrage eine Ergebnismenge zurückgibt. Existiert stellt die Bedeutung von „Existenz“ dar und findet nur die Datensätze, die die Bedingungen erfüllen. Sobald der erste passende Datensatz gefunden wird, wird die Suche beendet.
exists Unterabfrage
Die Unterabfrage ist eine erste SELECT-Anweisung und die Compute-Klausel und das Schlüsselwort into sind nicht zulässig.
exists bedeutet, ob die Unterabfrage eine Ergebnismenge zurückgibt.
SELECT * FROM Person WHERE exists ( SELECT 1); --SELECT 0 SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True,SELECT * FROM Person照常执行
Aber wenn aufgrund hinzugefügter Bedingungen in der Unterabfrage kein Ergebnissatz zurückgegeben wird, wird die Hauptanweisung nicht ausgeführt:
SELECT * FROM Person WHERE exists ( SELECT * FROM Person WHERE Person_Id = 100); --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行
Select a.Sno from (select Sno,score from SC where Sno='001') a, (select Sno,scorefrom SC where Cno='002') b Where a.score>b.score and a.Sno=b.Sno;
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonWas ist eine verschachtelte MySQL-Abfrageanweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!