Anweisungen zur Verwendung von SQL-JOINS

JOIN ist Personen, die mit Datenbanken in Kontakt standen, nicht unbekannt, und viele Menschen kennen alle Arten von JOIN, und viele Menschen haben kein gründliches Verständnis dafür.
Angenommen, wir haben zwei Tabellen, Table_A und Table_B. Die Daten in diesen beiden Tabellen lauten wie folgt:

TABLE_A
  PK Value
---- ----------
   1 FOX
   2 COP
   3 TAXI
   6 WASHINGTON
   7 DELL
   5 ARIZONA
   4 LINCOLN
  10 LUCENT

TABLE_B
  PK Value
---- ----------
   1 TROT
   2 CAR
   3 CAB
   6 MONUMENT
   7 PC
   8 MICROSOFT
   9 APPLE
  11 SCOTCH

Join-Syntax:

join_table:
    table_reference JOIN table_factor [join_condition]                                          //内连接
  | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition               //外连接
  | table_reference LEFT SEMI JOIN table_reference join_condition                               //左半连接
  | table_reference CROSS JOIN table_reference [join_condition] (as of Hive 0.10)

table_reference:
    table_factor                    //表
  | join_table                      //join语句

table_factor:
    tbl_name [alias]                //表名[别名]
  | table_subquery alias            //子查寻[别名]
  | ( table_references )            //带空号的table_reference

join_condition:
    ON expression                   //on开头的条件语句
1. Inner JOIN: (innere Verbindung)

Fügen Sie hier eine Bildbeschreibung ein
Dies ist die einfachste, am einfachsten zu verstehende und häufigste Verbindung. Diese Abfrage gibt alle Datensätze in der linken Tabelle (Tabelle A) zurück, deren Datensätze in der rechten Tabelle (Tabelle B) übereinstimmen. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list> 
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
-- Inner JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
       B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
INNER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
(5 row(s) affected)
2. Left JOIN: (Left JOIN)

Fügen Sie hier eine Bildbeschreibung ein
Diese Abfrage gibt alle Datensätze in der linken Tabelle (Tabelle A) zurück, unabhängig davon, ob diese Datensätze mit Datensätzen in der rechten Tabelle (Tabelle B) übereinstimmen. Es werden auch alle übereinstimmenden Datensätze aus der richtigen Tabelle zurückgegeben. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
-- Left JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
  10 LUCENT     NULL       NULL
(8 row(s) affected)
3. Links ohne JOIN ausschließen: (Links ohne JOIN-Ergebnisse)

Diese Abfrage gibt alle Datensätze in der linken Tabelle (Tabelle A) zurück, die nicht mit Datensätzen in der rechten Tabelle (Tabelle B) übereinstimmen. Diese Verbindung wird wie folgt geschrieben:
Fügen Sie hier eine Bildbeschreibung ein

SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
-- Left Excluding JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
  10 LUCENT     NULL       NULL
(3 row(s) affected)
4. Right JOIN: (Right Join)

Fügen Sie hier eine Bildbeschreibung ein
Diese Abfrage gibt alle Datensätze in der rechten Tabelle (Tabelle B) zurück, unabhängig davon, ob einer dieser Datensätze mit den Datensätzen in der linken Tabelle (Tabelle A) übereinstimmt. Es werden auch alle übereinstimmenden Datensätze in der linken Tabelle zurückgegeben. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
-- Right JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
(8 row(s) affected)
5. Rechts ohne JOIN ausschließen: (Rechts Join schließt inneres Join-Ergebnis aus)

Fügen Sie hier eine Bildbeschreibung ein
Diese Abfrage gibt alle Datensätze in der rechten Tabelle (Tabelle B) zurück, die nicht mit Datensätzen in der linken Tabelle (Tabelle A) übereinstimmen. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL
-- Right Excluding JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
(3 row(s) affected)
6, Outer JOIN: (äußere Verbindung)

Fügen Sie hier eine Bildbeschreibung ein
Diese Verbindung kann auch als vollständige äußere Verbindung oder als vollständige Verbindung bezeichnet werden. Diese Abfrage gibt alle Datensätze in den beiden Tabellen zurück und verbindet die Datensätze in der linken Tabelle (Tabelle A), die mit den Datensätzen in der rechten Tabelle (Tabelle B) übereinstimmen. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
-- Outer JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL
(11 row(s) affected)
7, Äußere ohne JOIN ausschließen: (äußere Verknüpfung schließt Ergebnis der inneren Verknüpfung aus)

Fügen Sie hier eine Bildbeschreibung ein
Diese Abfrage gibt alle Datensätze in der linken Tabelle (Tabelle A) und alle Datensätze zurück, die in der rechten Tabelle (Tabelle B) nicht übereinstimmen. Ich muss diese Art von Verbindung noch nicht verwenden, aber ich verwende alle anderen Arten von Verbindungen ziemlich häufig. Diese Verbindung wird wie folgt geschrieben:

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL
-- Outer Excluding JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL
OR B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL
(6 row(s) affected)

Beachten Sie, dass bei äußeren Verknüpfungen zuerst der innere Verknüpfungsdatensatz, dann der rechte Verknüpfungsdatensatz und zuletzt der linke Verknüpfungsdatensatz zurückgegeben werden (zumindest mein Microsoft SQL Server tut dies; dies erfordert natürlich keine ORDERBY-Anweisung). Sie können den Wikipedia-Artikel für weitere Informationen besuchen (der Eintrag ist jedoch nicht grafisch). Ich habe auch einen Spickzettel erstellt, den Sie bei Bedarf ausdrucken können. Wenn Sie mit der rechten Maustaste auf das Bild unten klicken und "Ziel speichern unter" auswählen, wird das Bild in voller Größe heruntergeladen.
Anweisungen zur Verwendung von SQL-JOINS

Ich denke du magst

Origin blog.51cto.com/15080921/2590554
Empfohlen
Rangfolge