連接查詢主要有這幾個(gè):
(1)內(nèi)連接 inner join
與where相同 select * from @a Aa join @b Bb on Aa.a=Bb.a
(2)左外連接 left join
返回左邊表所有符合條件的記錄 select * from @a Aa left join @b Bb on Aa.a=Bb.a
(3)右外連接 right join
返回右邊表所有符合條件的記錄 select * from @a Aa right join @b Bb on Aa.a=Bb.a
(4)全連接 full join
左向外連接和右向外連接的合集 select * from @a Aa full join @b Bb on Aa.a=Bb.a
(5)交叉連接 cross join
也稱笛卡兒積。返回左表中的每一行與右表中所有行的組合
僅當(dāng)至少有一個(gè)同屬于兩表的行符合聯(lián)接條件時(shí),內(nèi)聯(lián)接才返回行。內(nèi)聯(lián)接消除與另一個(gè)表中的任何行不匹配的行。而外聯(lián)接會(huì)返回 FROM 子句中提到的至少一個(gè)表或視圖的所有行,只要這些行符合任何 WHERE 或 HAVING 搜索條件。將檢索通過左向外聯(lián)接引用的左表的所有行,以及通過右向外聯(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
使用左向外聯(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)接的查詢:
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
不管是否與 publishers 表中的 city 列匹配,LEFT OUTER JOIN 均會(huì)在結(jié)果中包含 authors 表的所有行。注意:結(jié)果中所列的大多數(shù)作者都沒有相匹配的數(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)接的查詢:
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
新聞熱點(diǎn)
疑難解答