數據庫左右內外連接

原文地址:http://blog.csdn.net/zhxp_zfl_wl/article/details/6523235

JOIN: 如果表中有至少一個匹配,則返回行

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

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

FULL JOIN: 只要其中一個表中存在匹配,就返回行

*SQL INNER JOIN 關鍵字

在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。

INNER JOIN 關鍵字語法

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

註釋:INNER JOIN 與 JOIN 是相同的。

原始的表 (用在例子中的):

"Persons" 表:


Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing


"Orders" 表:


Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65


內連接(INNER JOIN)實例

現在,我們希望列出所有人的定購。

您可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

INNER JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

結果集:


LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678


INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。

SQL LEFT JOIN 關鍵字

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。

LEFT JOIN 關鍵字語法

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

註釋:在某些數據庫中, LEFT JOIN 稱爲 LEFT OUTER JOIN。

原始的表 (用在例子中的):

"Persons" 表:


Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing


"Orders" 表:


Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65


左連接(LEFT JOIN)實例

現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。

您可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

LEFT JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

結果集:


LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George



LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回所有的行,即使在右表 (Orders) 中沒有匹配的行。

SQL RIGHT JOIN 關鍵字

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。

RIGHT JOIN 關鍵字語法

SELECT column_name(s)

FROM table_name1

RIGHT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

註釋:在某些數據庫中, RIGHT JOIN 稱爲 RIGHT OUTER JOIN。

原始的表 (用在例子中的):

"Persons" 表:


Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing


"Orders" 表:


Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65


右連接(RIGHT JOIN)實例

現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。

您可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

RIGHT JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

結果集:


LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678



34764


RIGHT JOIN 關鍵字會從右表 (Orders) 那裏返回所有的行,即使在左表 (Persons) 中沒有匹配的行。

SQL FULL JOIN 關鍵字

只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。

FULL JOIN 關鍵字語法

SELECT column_name(s)

FROM table_name1

FULL JOIN table_name2

ON table_name1.column_name=table_name2.column_name

註釋:在某些數據庫中, FULL JOIN 稱爲 FULL OUTER JOIN。

原始的表 (用在例子中的):

"Persons" 表:


Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing


"Orders" 表:


Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65


全連接(FULL JOIN)實例

現在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購它們的人。

您可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

FULL JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

結果集:


LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George




34764


FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回所有的行。如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行同樣會列出。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章