連接查詢是關系數據庫中最主要的查詢,主要包括自連接、內連接、外連接和交叉連接。通過連接運算符可以實現多個表查詢。連接是關系數據庫模型的主要特點,也是它區別於其它類型數據庫管理系統的一個標志。 在關系數據庫管理系統中,表建立時各數據之間的關系不必確定,常把一個實體的所有信息存放在一個表中。當檢索數據時,通過連接操作查詢出存放在多個表中的不同實體的信息。連接操作給用戶帶來很大的靈活性,他們可以在任何時候增加新的數據類型。為不同實體創建新的表,然后通過連接進行查詢。
內連接的連接查詢結果集中僅包含滿足條件的行,內連接是SQL Server缺省的連接方式,可以把INNERJOIN簡寫成JOIN,根據所使用的比較方式不同,內連接又分為等值連接、自然連接和不等連接三種;交叉連接的連接查詢結果集中包含兩個表中所有行的組合;外連接的連接查詢結果集中既包含那些滿足條件的行,還包含其中某個表的全部行。
1.交叉連接
交叉連接即笛卡兒乘積,是指兩個關系中所有元組的任意組合。一般情況下,交叉查詢是沒有實際意義的。
例如:如果希望得到學生表和選課表兩個關系模式的乘積,查詢語句為
SELECT * FROM學生表CROSS JOIN選課表
2.內連接
內連接是一種最常用的連接類型。內連接查詢實際上是一種任意條件的查詢。使用內連接時,如果兩個表的相關字段滿足連接條件,就從這兩個表中提取數據並組合成新的記錄,也就是在內連接查詢中,只有滿足條件的元組才能出現在結果關系中。
例如:要查詢每個已經選課的學生的情況,查詢語句為
SELECT * FROM學生表INNER JOIN選課表ON學生表.學號=選課表.學號
3.根據比較方式分類:
等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
不等連接:在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。
自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重復列。
4.自連接
如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢就稱為自連接查詢。同一張表在FROM字句中多次出現,為了區別該表的每一次出現,需要為表定義一個別名。自連接是一種特殊的內連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表。
例如:要求檢索出學號為20210的學生的同班同學的信息,查詢語句為
SELECT學生表 * FROM學生表JOIN學生表AS學生表1ON學生表.班級=學生表1.班級
WHERE學生表1.學號='20210'
5.外連接
內連接的查詢結果都是滿足連接條件的元組。但有時我們也希望輸出那些不滿足連接條件的元組信息。比如,我們想知道每個學生的選課情況,包括已經選課的學生(這部分學生的學號在學生表中有,在選課表中也有,是滿足連接條件的),也包括沒有選課的學生(這部分學生的學號在學生表中有,但在選課表中沒有,不滿足連接條件),這時就需要使用外連接。外連接是只限制一張表中的數據必須滿足連接條件,而另一張表中的數據可以不滿足連接條件的連接方式。
左外連接(LEFTOUTER JOIN)
如果在連接查詢中,連接管子左端的表中所有的元組都列出來,並且能在右端的表中找到匹配的元組,那么連接成功。如果在右端的表中,沒能找到匹配的元組,那么對應的元組是空值(NULL)。這時,查詢語句使用關鍵字LEFT OUTERJOIN,也就是說,左外連接的含義是限制連接關鍵字右端的表中的數據必須滿足連接條件,而不關左端的表中的數據是否滿足連接條件,均輸出左端表中的內容。
例如:要查詢所有學生的選課情況,包括已經選課的和還沒有選課的學生,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績 FROM學生表LEFT OUTER JOIN選課表ON學生表.學號=選課表.學號
左外連接查詢中左端表中的所有元組的信息都得到了保留。
右外連接與左外連接類似,只是右端表中的所有元組都列出,限制左端表的數據必須滿足連接條件,而不管右端表中的數據是否滿足連接條件,均輸出表中的內容。
例如:同上例內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表RIGHTOUTERJOIN選課表ON學生表.學號=選課表.學號
右外連接查詢中右端表中的所有元組的信息都得到了保留。
全外連接(FULL OUTER JOIN)
全外連接查詢的特點是左、右兩端表中的元組都輸出,如果沒能找到匹配的元組,就使用NULL來代替。
例如:同左外連接例子內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績 FROM學生表FULL OUTER JOIN選課表ON學生表.學號=選課表.學號
全外連接查詢中所有表中的元組信息都得到了保留。
