Heim  >  Artikel  >  Datenbank  >  Was ist eine verschachtelte MySQL-Abfrageanweisung?

Was ist eine verschachtelte MySQL-Abfrageanweisung?

WBOY
WBOYOriginal
2022-03-09 15:44:168377Durchsuche

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)“.

Was ist eine verschachtelte MySQL-Abfrageanweisung?

Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.

Was ist eine verschachtelte MySQL-Abfrageanweisung?

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. Zusammensetzung der Unterabfrage

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.

2. Syntaxregeln für Unterabfragen

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.

3. Unterabfrage, die einen Wert zurückgibt

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 = &#39;张三&#39;);

3.2 wie verschachtelte Abfrage

select count(distinct(Tname)) --查询姓“张”的老师的个数
from Teacher
where Tname like &#39;张%&#39;;

4. Unterabfrage, die eine Menge von Werten zurückgibt

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 = &#39;中国&#39;);

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 = &#39;中国&#39;);

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 = &#39;中国&#39;);

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的记录,则子查询没有结果集返回,主语句不执行

5.1 Abfrage „001“ Kursverhältnis „002“ Studentenzahlen aller Studenten mit guten Kursergebnissen;

Select a.Sno from (select Sno,score from SC where Sno=&#39;001&#39;) a,
(select Sno,scorefrom SC where Cno=&#39;002&#39;) b
Where a.score>b.score and a.Sno=b.Sno;

Empfohlenes Lernen:

MySQL-Video-Tutorial

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn