Die grundlegende Bedeutung einer Unterabfrage ist eine „Abfrageanweisung“, die an bestimmten Positionen innerhalb einer Abfrageanweisung (Auswahlanweisung) erscheint. Dieser Artikel gibt Ihnen hauptsächlich eine kurze Einführung in MySQL-Unterabfragen und hofft, allen zu helfen.
Beispiel:
Nach der Änderung:
Wenn die Unterabfrageanweisung von „
select 5000
“ durch „Select „Der Durchschnittspreis aller Waren“ hat praktische Bedeutung.
Die Unterabfrage bedient die Hauptabfrage
Die Hauptabfrage wird erst ausgeführt, nachdem die Unterabfrage bestimmte Ergebnisdaten erhalten hat.
In der Form kann es wie folgt ausgedrückt werden:
Feld, Ausdruck oder Unterabfrage [als Alias] aus Tabellennamen auswählen oder Ergebnisse verknüpfen oder Unterabfragen, bei denen Felder oder Ausdrücke oder bedingte Beurteilungen von Unterabfragen
Das heißt, Unterabfragen können an diesen Positionen erscheinen (haben ist eigentlich in Ordnung, weil es die gleiche Bedeutung hat wie wo) ;
Unterabfrage, unterteilt nach Position (Anlass):
类型 | 形式 |
---|---|
作为主查询的结果数据 | select c1,(select f1 from tab2) as f11 from tab1; #这里子查询应该只有一个数据(一行一列,标量子查询) |
作为主查询的条件数据 | select c1 from tab1 where c1 in (select f1 from tab2); #这里子查询可以是多个数据(多行一列,列子查询) |
作为主查询的来源数据 | select c1 from (select f1 as c1, f2 from tab2) as t2; #这里子查询可以是任意查询结果(表子查询) |
Unterabfragen in Vergleichsoperatoren
Form:
Operandenvergleichsoperatoren (skalare Unterabfrage); 🎜>
select .... from XXX where id > 5;
select * from product where price = (select max(price) from product );
Vorherige Verwendung von in:
XX in (值1,值2,值3,....);
XX in (列子查询)
select * from product where protype_id in( select protype_id from product_type where protype_name like ‘%电%’ );
in der Form:
Bedeutung:
操作数 比较运算符 any (列子查询);
select * from tab1 where id > any (select f1 from tab2);
Form:
Bedeutung:
操作数 比较运算符 all (列子查询);
select * from tab2 where f1 > all ( select id from tab1 );
Bedeutung:
Wenn diese Unterabfrage „Daten hat“, ist das Ergebnis von „existiert“ wahr, andernfalls ist es falsch
where exists( 子查询 )
Weil die Unterabfrage existiert Diese Bedeutung führt oft zu der Situation in der Hauptabfrage: Entweder werden alle entfernt, oder keiner von ihnen wird entfernt. Bei einer Beschränkung auf diese Bedeutung (Gebrauchssituation) verliert es grundsätzlich seine praktische Bedeutung.
In tatsächlichen Anwendungen ist diese Unterabfrage oft keine eigenständige Unterabfrage, sondern muss mit der Datenquelle (Tabelle der „Hauptabfrage“) kombiniert werden. ), eine Art Beziehung aufbauen – normalerweise eine Verbindungsbeziehung. Die Art und Weise der Einrichtung ist „implizit“, das heißt, die Beziehung spiegelt sich nicht im Code wider, aber es gibt intern die „Substanz“ ihrer Verbindung.Diese implizite Verbindungsmethode spiegelt sich normalerweise in der bedingten Where-Anweisung in der Unterabfrage wider, wobei die Daten (Felder) in der Hauptabfragetabelle verwendet werden 🎜>
Beispiel:
- Diese Art von Unterabfrageanweisung kann nicht „unabhängig existieren (unabhängig ausgeführt)“ werden, sondern muss zusammen mit der Hauptabfrage verwendet werden; - Andere Unterabfragen können unabhängig ausgeführt werden und erhalten ein laufendes Ergebnis.
- Die Bedingungen in dieser Unterabfrage sollten so eingestellt werden, dass sie eine bestimmte Korrelation mit einem bestimmten Feld der Hauptabfrage haben. Normalerweise ist diese Beurteilung die „ursprüngliche Verbindungsbedingung“ der beiden Tabellen
Wenn eine Abfrageanforderung mithilfe einer Join-Abfrage oder einer Unterabfrage ermittelt werden kann, wird normalerweise die Verwendung der Join-Interpolation empfohlen, da diese effizienter ist.
Detaillierte Einführung in MySQL-Unterabfragen
Was ist eine MySQL-Unterabfrage? Wie filtere ich mithilfe von Unterabfragen?
Das obige ist der detaillierte Inhalt vonEine kurze Einführung in die MySQL-Unterabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!