Heim  >  Artikel  >  Datenbank  >  MySQL-Mehrtabellen-Gemeinschaftsabfrage

MySQL-Mehrtabellen-Gemeinschaftsabfrage

(*-*)浩
(*-*)浩Original
2019-05-09 16:15:2524473Durchsuche

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.

MySQL-Mehrtabellen-Gemeinschaftsabfrage

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!

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