Heim >Datenbank >MySQL-Tutorial >Beispiel für eine MySQL-Verbindungsabfrageoperation mit mehreren Tabellen
In tatsächlichen Projekten gibt es Beziehungen zwischen mehreren Tabellen. Es ist unmöglich, alle Daten in einer Tabelle abzurufen. Wenn keine Tabellenverbindung besteht, sind viele Operationen erforderlich. Beispielsweise müssen Sie restriktive Bedingungen aus Tabelle A finden, um Daten aus Tabelle B abzurufen. Für den Betrieb sind nicht nur mehrere Tische erforderlich, sondern es ist auch nicht sehr effizient. Zum Beispiel das Beispiel im Buch:
Der Code lautet wie folgt:
SELECT FId FROM T_Customer WHERE FName='MIKE'
Diese SQL-Anweisung gibt 2 zurück, d. h. der FId-Wert des Kunden namens MIKE ist 2 , damit er in T_Order Retrieve-Datensätze mit FCustomerId gleich 2 eingegeben werden kann:
Der Code lautet wie folgt:
SELECT FNumber,FPrice FROM T_Order WHERE FCustomerId=2
Sehen wir uns die Tabellenverbindung im Detail an. Es gibt viele verschiedene Arten von Tabellen-Joins, darunter Cross-Joins (CROSS JOIN), innere Joins (INNER JOIN) und äußere Joins (OUTTER JOIN).
(1) INNER JOIN: Inner Join kombiniert zwei Tabellen und erhält nur Daten, die die Verbindungsbedingungen der beiden Tabellen erfüllen.
Der Code lautet wie folgt:
SELECT o.FId,o.FNumber,o.FPrice, c.FId,c.FName,c .FAge FROM T_Order o JOIN T_Customer c ON o.FCustomerId= c.FId
Hinweis: In den meisten Datenbanksystemen ist INNER in INNER JOIN optional und INNER JOIN ist die Standardverbindungsmethode.
Bei der Verwendung von Tabellenverknüpfungen sind Sie nicht darauf beschränkt, nur zwei Tabellen zu verbinden, da es viele Situationen gibt, in denen viele Tabellen kontaktiert werden müssen. Beispielsweise muss die Tabelle T_Order auch mit den Tabellen T_Customer und T_OrderType verbunden werden, um die erforderlichen Informationen abzurufen. Schreiben Sie einfach die folgende SQL-Anweisung:
Der Code lautet wie folgt:
SELECT o.FId,o.FNumber,o.FPrice, c.FId,c.FName,c .FAge FROM T_Order o JOIN T_Customer c ON o.FCustomerId= c.FId INNER JOIN T_OrderType ON T_Order.FTypeId= T_OrderType.FId
(2 ) Cross-Join (CROSS JOIN): Alle Datensätze in allen am Cross-Join beteiligten Tabellen werden in die Ergebnismenge einbezogen. Querverbindungen können auf zwei Arten definiert werden, nämlich implizite und explizite Verbindungen.
Sehen wir uns das implizite Beispiel an:
Der Code lautet wie folgt:
SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge, T_Order.FId, T_Order.FNumber, T_Order.FPrice FROM T_Customer, T_Order
Wenn Sie eine explizite Verbindung verwenden, müssen Sie CROSS JOIN verwenden. Das Beispiel lautet wie folgt:
Der Code lautet wie folgt:
SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge, T_Order.FId, T_Order.FNumber, T_Order.FPrice FROM T_Customer CROSS JOIN T_Order
(3) OUTTER JOIN: Interne Verbindungen erhalten nur Daten, die die Verbindungsbedingungen erfüllen, während externe Verbindungen hauptsächlich ein solches Szenario lösen . Es besteht kein Zweifel, dass die Daten, die die Bedingungen erfüllen, abgerufen werden. Die externe Verbindung ruft auch einen anderen Teil der Daten ab, nämlich die Daten, die die Bedingungen nicht erfüllen, mit NULL zu füllen. Schauen wir uns zunächst die Klassifizierung von Outer-Joins an: linker Outer-Join (LEFT OUTER JOIN), rechter Outer-Join (RIGHT OUTER JOIN) und vollständiger Outer-Join (FULLOUTER JOIN).
I. LEFT OUTER JOIN: Wie bereits erwähnt, werden Daten, die die Bedingungen nicht erfüllen, mit NULL gefüllt. Was muss also konkret mit NULL gefüllt werden? Wenn unter den Verbindungsbedingungen die Daten in der linken Tabelle, die die Bedingungen erfüllen, keine entsprechende Übereinstimmung in der rechten Tabelle haben, muss das entsprechende rechte Tabellenfeld vorhanden sein mit NULL-Wert gefüllt. Das heißt, der Hauptteil der linken Außenverbindung ist die linke Tabelle, und die rechte Tabelle entspricht dieser.
Der Code lautet wie folgt:
SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o LEFT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId
Hinweis: Wenn Sie die linke äußere Verbindung verwenden, können die inkompatiblen Daten durch die Where-Anweisung gefiltert werden
Der Code lautet wie folgt:
SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o LEFT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId WHERE o.FPrice>=150
Right OUTER JOIN: Der rechte Outer Join ist das Gegenteil des linken Outer Joins. Die Felder der linken Tabelle werden mit NULL-Werten gefüllt. Mit anderen Worten: Das Subjekt der rechten Außenverbindung ist die rechte Tabelle, und die linke Tabelle stimmt mit ihr überein.
Der Code lautet wie folgt:
SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o RIGHT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId
Hinweis: Wie beim linken Outer-Join können Sie die where-Anweisung zum Filtern verwenden
III. : Der vollständige Outer-Join ist der linke. Eine Sammlung von Outer-Joins und rechten Outer-Joins. Das heißt, es umfasst sowohl die Ergebnismenge der linken Außenverbindung als auch die Ergebnismenge der rechten Außenverbindung.
Der Code lautet wie folgt:
SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o FULL OUTER JOIN T_Customer c ON o.FCustomerId=c.FId
Das Ergebnis entspricht:
SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o LEFT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId UNION SELECT o.FNumber,o.FPrice,o.FCustomerId, c.FName,c.FAge FROM T_Order o RIGHT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId
================== ==== =========================================== ==== ===============
Eine Vielzahl von SQL-Schreibmethoden für Abfragen mit mehreren Tabellen: (Das Folgende ist eine Abfrage aus zwei Tabellenbfaaa4c9f68374ecd7f77d3f4033667a, alle Felder in der Tabelle v_goods anzeigen, das Namensfeld in der Tabelle admin2 als Addierer anzeigen, das Namensfeld in der Tabelle admin2 als Operator anzeigen) Die Abfrage mehrerer Tabellen kann entsprechend geschrieben werden die folgenden drei Beispielsätze sql
SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v where 1=1; SELECT v.*,a.name aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ; SELECT v.*,a.name aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;
Das obige ist der detaillierte Inhalt vonBeispiel für eine MySQL-Verbindungsabfrageoperation mit mehreren Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!