mysql - outer - sql連接




INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN有什麼區別? (2)

SQL JOIN子句用於根據兩個或多個表之間的公用字段合併行。

SQL中有不同類型的連接:

INNER JOIN :兩個表中匹配時返回行。

LEFT JOIN :即使右表中沒有匹配,也會返回左表中的所有行。

RIGHT JOIN :即使左表中沒有匹配,也會返回右表中的所有行。

FULL JOIN :它結合了左外連接和右外連接的結果。

連接的表格將包含來自兩個表格的所有記錄,並在任何一邊填寫缺失匹配的NULL。

SELF JOIN :用於將表連接到自身,就好像該表是兩個表一樣,臨時重命名SQL語句中的至少一個表。

CARTESIAN連接 :從兩個或多個連接表中返回記錄集的笛卡爾乘積。

我們可以採取每個前四個連接細節:

我們有兩個具有以下值的表格。

表A

id  firstName                  lastName
.......................................
1   arun                        prasanth                 
2   ann                         antony                   
3   sruthy                      abc                      
6   new                         abc                                           

表B

id2 age Place
................
1   24  kerala
2   24  usa
3   25  ekm
5   24  chennai

.................................................. ..................

內部聯接

注意 :它給出了兩個表的交集,即它們在TableA和TableB中有共同的行

句法

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

將其應用於我們的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;

結果會是

firstName       lastName       age  Place
..............................................
arun            prasanth        24  kerala
ann             antony          24  usa
sruthy          abc             25  ekm

左加入

注意 :將為TableA中的所有選定行添加TableB中的所有常用選定行。

句法

SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

將其應用於我們的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age   Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL

正確加入

注意 :將為TableB中的所有選定行添加TableA中的所有常用選定行。

句法

SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

將其應用於我們的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age     Place
...............................................................................
arun                        prasanth                    24     kerala
ann                         antony                      24     usa
sruthy                      abc                         25     ekm
NULL                        NULL                        24     chennai

完全加入

注意 :它與聯合操作相同,它將從兩個表中返回所有選定的值。

句法

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

將其應用於我們的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;

結果

firstName                   lastName                    age    Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL
NULL                        NULL                        24    chennai

有趣的事實

對於INNER加入訂單並不重要

對於(左,右或全)OUTER加入,訂單事宜

最好去檢查這個Link它會給你關於連接順序的有趣的細節

這個問題在這裡已經有了答案:

MySQL中的 INNER JOINLEFT JOINRIGHT JOINFULL JOIN什麼區別?


INNER JOIN根據外鍵獲取兩個表之間通用的所有記錄

LEFT JOIN從LEFT鏈接表中獲取所有記錄,但是如果從RIGHT表中選擇了一些列,如果沒有相關記錄,這些列將包含NULL

RIGHT JOIN就像上面那樣,但在RIGHT表中獲取所有記錄

FULL JOIN從兩個表中獲取所有記錄,並將NULL置於相對錶中不存在相關記錄的列中





outer-join