Unterabfragen sind Abfragen innerhalb einer anderen Abfrage verschachtelt . Unterabfragen können Sie jeden Teil der Aussage zu trennen und bieten eine besser lesbare Alternative zur Durchführung von Operationen , die erfordern komplexe würde verbindet und Gewerkschaften ohne Unterabfragen . MySQL Unterabfragen können einen einzelnen Wert zurückgeben , einreihig, einzelne Spalte oder eine Tabelle . Die Syntax
Die grundlegende Syntax für eine Unterabfrage ist dies:
SELECT * FROM table WHERE columna = ( SELECT ColumnB FROM Tabelle2 );
Unterabfragen a sein muss SELECT, INSERT , UPDATE, DELETE , SET oder DO -Anweisung , und Sie können nicht ändern , und wählen Sie eine Tabelle aus es in der Unterabfrage .
Unterabfragen sind in der Regel auf der rechten Seite der WHERE-Klausel gefunden wird, kann die enthalten alle der folgende Vergleich und logische Operatoren : = (gleich ), < > (ungleich ), < = (kleiner oder gleich),> = (größer oder gleich ), < ( kleiner), > ; (größer als) , BETWEEN ( Wert liegt zwischen zwei Werten ) NOT (logisches NOT) , AND ( logisches UND) , OR ( logisches ODER) . Sie können auch die DISTINCT , GROUP BY , ORDER BY und LIMIT Suchbegriffe. Sie können sogar in Verbindung mit JOIN -Anweisungen verwendet werden . Andere als die oben genannten Einschränkungen gibt es nur sehr wenige Einschränkungen in Unterabfragen innerhalb MySQL platziert .
Es gibt nicht einmal eine Beschränkung der Anzahl der Unterabfragen, die in einer Anweisung gefunden werden kann. Solange Sie jede Unterabfrage in Klammern setzen , können Sie so viele verschachtelte Abfragen , wie Sie Ihre Daten finden müssen. Weitere Informationen zu Unterabfragen können in der MySQL- Referenzhandbuch (siehe Ressourcen )
Beispiel
Angenommen, Sie haben zwei Tabellen: . Die erste enthält den Vornamen, Name, Adresse und Postleitzahl der Mitglieder Ihrer Mailing-Liste , die zweite enthält Stadt, Bundesland und Postleitzahl. Wenn Sie die Namen der Mitglieder , die in Georgien leben finden wollten, könnten Sie mehrere Select-Anweisungen . Die erste Aussage wäre, die Postleitzahlen für Georgien zu finden :
SELECT zip FROM WHERE Postleitzahl state = "Georgia" ;
Dann würden Sie eine select-Anweisung für jede Postleitzahl zurückgegeben Ausgabe :
SELECT fname , lname FROM Adresse WHERE zip = " [ Postleitzahl ] ";
Diese Methode sehr zeitaufwendig und fehleranfällig ist . Es ist einfach, eine Postleitzahl vermissen, vor allem, wenn es eine Menge von ihnen sind
Ein einfacher Weg, um Ihre Aufgabe wäre es, die erste Anweisung als Unterabfrage auf die zweite Anweisung ausgeben : .
< P > SELECT fname , lname FROM Adresse WHERE zip = (SELECT FROM zip Postleitzahl WHERE state = "Georgia" ); .
Diese Abfrage alle Mitglieder Ihrer Mailing-Liste , die in Georgien leben mit einer Abfrage zurückgibt