Heim  >  Artikel  >  Datenbank  >  Beispiel für eine MySQL-Verbindungsabfrageoperation mit mehreren Tabellen

Beispiel für eine MySQL-Verbindungsabfrageoperation mit mehreren Tabellen

无忌哥哥
无忌哥哥Original
2018-07-18 10:00:542167Durchsuche

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!

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