Inner JOIN INNER JOIN wird in MySQL als Equijoin bezeichnet, was bedeutet, dass Sie die Equijoin-Bedingungen angeben müssen. CROSS und INNER JOIN werden in MySQL gemeinsam geteilt.
Multi-Table-Join-Typ
1. Kartesisches Produkt (Cross Join) in MySQL kann CROSS JOIN sein oder CROSS That weglassen ist, JOIN oder verwenden Sie ',' wie zum Beispiel:
SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2
Da das zurückgegebene Ergebnis das Produkt der beiden verbundenen Datentabellen ist, wird die Verwendung im Allgemeinen nicht empfohlen, wenn WHERE, ON oder USING vorhanden sind Bedingungen, denn Wenn zu viele Datentabellenelemente vorhanden sind, ist die Geschwindigkeit sehr langsam. Verwenden Sie im Allgemeinen LEFT [OUTER] JOIN oder RIGHT [OUTER] JOIN
2. INNER JOIN In MySQL wird INNER JOIN als Equijoin bezeichnet, das heißt, Sie müssen die Equijoin-Bedingungen in MySQL angeben zusammen geteilt. join_table: table_reference [INNER |. CROSS] JOIN table_factor [join_condition]
3. Äußere Verknüpfungen werden in MySQL in linke äußere Verknüpfungen und rechte Verknüpfungen unterteilt, d. h. zusätzlich zur Rückgabe von Ergebnissen, die die Verknüpfungsbedingungen erfüllen Bei Ergebnissen, die die Join-Bedingungen in der linken Tabelle (Links-Join) oder der rechten Tabelle (Rechts-Join) nicht erfüllen, wird entsprechend NULL verwendet.
Beispiel:
user表: id | name ——— 1 | libk 2 | zyfon 3 | daodao user_action表: user_id | action ————— 1 | jump 1 | kick 1 | jump 2 | run 4 | swim
SQL-Anweisung:
select id, name, action from user as uleft join user_action a on u.id = a.user_id
Ergebnis:
id | name | action ——————————– 1 | libk | jump 结果1 1 | libk | kick 结果2 1 | libk | jump 结果3 2 | zyfon | run 结果4 3 | daodao | null 结果5 ---------------------
Analyse:
Beachten Sie, dass es auch solche gibt user_action Es gibt einen Datensatz von user_id=4, action=swim, der jedoch nicht in den Ergebnissen erscheint
Und der Benutzer mit id=3, name=daodao in der Benutzertabelle hat keinen entsprechenden Datensatz in user_action, aber es erscheint im Ergebnissatz
Da es sich jetzt um einen Left-Join handelt, basiert die gesamte Arbeit auf Left.
Die Ergebnisse 1, 2, 3 und 4 sind Alle Datensätze sowohl in der linken als auch in der rechten Tabelle. 5 ist ein Datensatz, der nur in der linken Tabelle, aber nicht in der rechten Tabelle vorhanden ist
Arbeitsprinzip:
Lesen Sie einen Datensatz aus der linken Tabelle und wählen Sie alle rechten Tabellen aus, die übereinstimmen. Datensätze (n) werden zu n Datensätzen verbunden (einschließlich doppelter Zeilen, z. B. Ergebnis 1 und Ergebnis 3). Wenn es auf der rechten Seite keine übereinstimmende Tabelle gibt Bei der Ein-Bedingung sind alle verbundenen Felder null. Lesen Sie dann mit dem nächsten weiter.
Erweiterung:
Wir können die Regel verwenden, dass, wenn in der rechten Tabelle keine Übereinstimmung vorhanden ist, null angezeigt wird, um alle Datensätze zu finden, die sich in der linken Tabelle befinden, aber nicht in der rechten Tabelle. Achten Sie auf die verwendete Beurteilung. Diese Spalte muss als nicht null deklariert werden.
Etwa:
select id, name, action from user as uleft join user_action a on u.id = a.user_idwhere a.user_id is NULL
(Hinweis: 1. Wenn der Spaltenwert null ist, sollte null anstelle von =NULL verwendet werden
2. Hier die a.user_id Die Spalte muss als NOT NULL deklariert werden.)
Das Ergebnis der obigen SQL:
id | name | action ————————– 3 | daodao | NULL
Das obige ist der detaillierte Inhalt vonMySQL-Mehrtabellen-Gemeinschaftsabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!