非常詳細(xì)的SQL--JOIN之完全用法
在 FROM 子句中指定外聯(lián)接時(shí),可以由下列幾組關(guān)鍵字中的一組指定:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外聯(lián)接的結(jié)果集包括 LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外聯(lián)接是左向外聯(lián)接的反向聯(lián)接。將返回右表的所有行。如果右表的某行在左表中沒(méi)有匹配行,則將為左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。
完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。
僅當(dāng)至少有一個(gè)同屬于兩表的行符合聯(lián)接條件時(shí),內(nèi)聯(lián)接才返回行。內(nèi)聯(lián)接消除與另一個(gè)表中的任何行不匹配的行。而外聯(lián)接會(huì)返回 FROM 子句中提到的至少一個(gè)表或視圖的所有行,只要這些行符合任何 WHERE 或 HAVING 搜索條件。將檢索通過(guò)左向外聯(lián)接引用的左表的所有行,以及通過(guò)右向外聯(lián)接引用的右表的所有行。完整外部聯(lián)接中兩個(gè)表的所有行都將返回。
Microsoft® SQL Server™ 2000 對(duì)在 FROM 子句中指定的外聯(lián)接使用以下 SQL-92 關(guān)鍵字:
LEFT OUTER JOIN 或 LEFT JOIN
RIGHT OUTER JOIN 或 RIGHT JOIN
FULL OUTER JOIN 或 FULL JOIN
SQL Server 支持 SQL-92 外聯(lián)接語(yǔ)法,以及在 WHERE 子句中使用 *= 和 =* 運(yùn)算符指定外聯(lián)接的舊式語(yǔ)法。由于 SQL-92 語(yǔ)法不容易產(chǎn)生歧義,而舊式 Transact-SQL 外聯(lián)接有時(shí)會(huì)產(chǎn)生歧義,因此建議使用 SQL-92 語(yǔ)法。
使用左向外聯(lián)接
假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。
若要在結(jié)果中包括所有的作者,而不管出版商是否住在同一個(gè)城市,請(qǐng)使用 SQL-92 左向外聯(lián)接。下面是 Transact-SQL 左向外聯(lián)接的查詢和結(jié)果:
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
下面是結(jié)果集:
au_fname au_lname pub_name
-------------------- ------------------------------ -----------------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia K***n NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
(23 row(s) affected)
不管是否與 publishers 表中的 city 列匹配,LEFT OUTER JOIN 均會(huì)在結(jié)果中包含 authors 表的所有行。注意:結(jié)果中所列的大多數(shù)作者都沒(méi)有相匹配的數(shù)據(jù),因此,這些行的 pub_name 列包含空值。
使用右向外聯(lián)接
假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。SQL-92 右向外聯(lián)接運(yùn)算符 RIGHT OUTER JOIN 指明:不管第一個(gè)表中是否有匹配的數(shù)據(jù),結(jié)果將包含第二個(gè)表中的所有行。
若要在結(jié)果中包括所有的出版商,而不管城市中是否還有出版商居住,請(qǐng)使用 SQL-92 右向外聯(lián)接。下面是 Transact-SQL 右向外聯(lián)接的查詢和結(jié)果:
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a RIGHT OUTER JOIN publishers AS p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
下面是結(jié)果集:
au_fname au_lname pub_name
-------------------- ------------------------ --------------------
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books
(9 row(s) affected)
使用謂詞(如將聯(lián)接與常量比較)可以進(jìn)一步限制外聯(lián)接。下例包含相同的右向外聯(lián)接,但消除銷售量低于 50 本的書籍的書名:
USE pubs
SELECT s.stor_id, s.qty, t.title
FROM sales s RIGHT OUTER JOIN titles t
ON s.title_id = t.title_id
AND s.qty > 50
ORDER BY s.stor_id ASC
下面是結(jié)果集:
stor_id qty title
------- ------ ---------------------------------------------------------
(null) (null) But Is It User Friendly?
(null) (null) Computer Phobic AND Non-Phobic Individuals: Behavior
Variations
(null) (null) Cooking with Computers: Surreptitious Balance Sheets
(null) (null) Emotional Security: A New Algorithm
(null) (null) Fifty Years in Buckingham Palace Kitchens
7066 75 Is Anger the Enemy?
(null) (null) Life Without Fear
(null) (null) Net Etiquette
(null) (null) Onions, Leeks, and Garlic: Cooking Secrets of the
Mediterranean
(null) (null) Prolonged Data Deprivation: Four Case Studies
(null) (null) Secrets of Silicon Valley
(null) (null) Silicon Valley Gastronomic Treats
(null) (null) Straight Talk About Computers
(null) (null) Sushi, Anyone?
(null) (null) The Busy Executive's Database Guide
(null) (null) The Gourmet Microwave
(null) (null) The Psychology of Computer Cooking
(null) (null) You Can Combat Computer Stress!
(18 row(s) affected)
有關(guān)謂詞的更多信息,請(qǐng)參見(jiàn) WHERE。
使用完整外部聯(lián)接
若要通過(guò)在聯(lián)接結(jié)果中包括不匹配的行保留不匹配信息,請(qǐng)使用完整外部聯(lián)接。Microsoft® SQL Server™ 2000 提供完整外部聯(lián)接運(yùn)算符 FULL OUTER JOIN,不管另一個(gè)表是否有匹配的值,此運(yùn)算符都包括兩個(gè)表中的所有行。
假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。SQL-92 FULL OUTER JOIN 運(yùn)算符指明:不管表中是否有匹配的數(shù)據(jù),結(jié)果將包括兩個(gè)表中的所有行。
若要在結(jié)果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商是否住在同一個(gè)城市,請(qǐng)使用完整外部聯(lián)接。下面是 Transact-SQL 完整外部聯(lián)接的查詢和結(jié)果:
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
下面是結(jié)果集:
au_fname au_lname pub_name
-------------------- ---------------------------- --------------------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia K***n NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books
(30 row(s) affected)
相關(guān)文章
SQLServer"通過(guò)端口1433連接到主機(jī)localhost的TCP/IP連接失敗"常見(jiàn)問(wèn)題的解
今天碰到一個(gè)問(wèn)題,查了很久,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Java通過(guò)JDBC連接SQLServer?2012出現(xiàn)"通過(guò)端口1433連接到主機(jī)localhost的TCP/IP連接失敗"常見(jiàn)問(wèn)題的解決方案,需要的朋友可以參考下2023-05-05監(jiān)控 log文件大小的存儲(chǔ)過(guò)程
用來(lái)監(jiān)控 log文件大小的存儲(chǔ)過(guò)程,需要的朋友可以參考下。2010-07-07Activiti-Explorer使用sql server數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法
本文主要介紹Activiti-Explorer使用sql server數(shù)據(jù)庫(kù),這里整理了詳細(xì)的資料來(lái)說(shuō)明Activiti-Explorer使用SQL Server的實(shí)例,有興趣的小伙伴可以參考下2016-08-08asp.net 使用SqlBulkCopy極速插入數(shù)據(jù)到 SQL Server
今天早上reader 上收到cnblogs的訂閱里看到一個(gè)關(guān)于SQL語(yǔ)句快速插入的文章,提到SqlBulkCopy,感覺(jué)不錯(cuò),按他的測(cè)試SqlBulkCopy要比普通插入快近30倍,2010-04-04sql server 常用的幾個(gè)數(shù)據(jù)類型
Sql server中常用的幾個(gè)數(shù)據(jù)類型,主要方便剛開(kāi)始學(xué)習(xí)sqlserver的朋友。2009-07-07SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢
這篇文章介紹了SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05VS2015安裝之后加裝Sql server2014詳細(xì)步驟
這篇文章主要介紹了VS2015安裝之后加裝SQL SERVER2014詳細(xì)步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12