連線查詢

連線查詢

連線查詢是關係資料庫中最主要的查詢,主要包括內連線外連線和交叉連線等。通過連線運算符可以實現多個表查詢。連線是關係資料庫模型的主要特點,也是它區別於其它類型資料庫管理系統的一個標誌。 在關係資料庫管理系統中,表建立時各數據之間的關係不必確定,常把一個實體的所有信息存放在一個表中。當檢索數據時,通過連線操作查詢出存放在多個表中的不同實體的信息。連線操作給用戶帶來很大的靈活性,他們可以在任何時候增加新的數據類型。為不同實體創建新的表,然後通過連線進行查詢。

基本介紹

  • 中文名:連線查詢
  • 意義:關係資料庫中最主要的查詢
  • 包括內連線外連線、交叉連線等
  • 特點:連線
類型形式,交叉連線,內連線,自連線,外連線,套用示例,

類型形式

內連線的連線查詢結果集中僅包含滿足條件的行,內連線是SQL Server預設的連線方式,可以把INNERJOIN簡寫成JOIN根據所使用的比較方式不同,內連線又分為等值連線、自然連線和不等連線三種;交叉連線的連線查詢結果集中包含兩個表中所有行的組合;外連線的連線查詢結果集中既包含那些滿足條件的行,還包含其中某個表的全部行,有3種形式的外連線:左外連線、右外連線、全外連線。

交叉連線

交叉連線即笛卡兒乘積,是指兩個關係中所有元組的任意組合。一般情況下,交叉查詢是沒有實際意義的。
例如:如果希望得到學生表和選課表兩個關係模式的乘積,查詢語句為
SELECT*
FROM學生表CROSS JOIN選課表

內連線

內連線是一種最常用的連線類型。內連線查詢實際上是一種任意條件的查詢。使用內連線時,如果兩個表的相關欄位滿足連線條件,就從這兩個表中提取數據並組合成新的記錄,也就是在內連線查詢中,只有滿足條件的元組才能出現在結果關係中。
例如:要查詢每個已經選課的學生的情況,查詢語句為
FROM學生表INNER JOIN選課表ON學生表.學號=選課表.學號
分類:
根據比較方式分為:
1)等值連線:在連線條件中使用等於號(=)運算符比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。
2)不等連線:在連線條件使用除等於運算符以外的其它比較運算符比較被連線的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。
3)自然連線:在連線條件中使用等於(=)運算符比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。

自連線

如果在一個連線查詢中,涉及到的兩個表都是同一個表,這種查詢就稱為自連線查詢。同一張表在FROM字句中多次出現,為了區別該表的每一次出現,需要為表定義一個別名。自連線是一種特殊的內連線,它是指相互連線的表在物理上為同一張表,但可以在邏輯上分為兩張表。
例如:要求檢索出學號為20210的學生的同班同學的信息,查詢語句為
SELECT學生表.*
FROM學生表JOIN學生表AS學生表1ON學生表.班級=學生表1.班級
WHERE學生表1.學號='20210'

外連線

內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組信息。比如,我們想知道每個學生的選課情況,包括已經選課的學生(這部分學生的學號在學生表中有,在選課表中也有,是滿足連線條件的),也包括沒有選課的學生(這部分學生的學號在學生表中有,但在選課表中沒有,不滿足連線條件),這時就需要使用外連線。外連線是只限制一張表中的數據必須滿足連線條件,而另一張表中的數據可以不滿足連線條件的連線方式。3種外連線:
1)外連線LEFTOUTER JOIN
如果在連線查詢中,連線管子左端的表中所有的元組都列出來,並且能在右端的表中找到匹配的元組,那么連線成功。如果在右端的表中,沒能找到匹配的元組,那么對應的元組是空值NULL)。這時,查詢語句使用關鍵字LEFT OUTERJOIN,也就是說,左外連線的含義是限制連線關鍵字右端的表中的數據必須滿足連線條件,而不關左端的表中的數據是否滿足連線條件,均輸出左端表中的內容。
例如:要查詢所有學生的選課情況,包括已經選課的和還沒有選課的學生,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表LEFT OUTER JOIN選課表ON學生表.學號=選課表.學號
外連線查詢中左端表中的所有元組的信息都得到了保留。
2)右外連線(RIGHTOUTERJOIN
右外連線與左外連線類似,只是右端表中的所有元組都列出,限制左端表的數據必須滿足連線條件,而不管右端表中的數據是否滿足連線條件,均輸出表中的內容。
例如:同上例內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表RIGHTOUTERJOIN選課表ON學生表.學號=選課表.學號
右外連線查詢中右端表中的所有元組的信息都得到了保留。
3)外連線FULL OUTER JOIN
全外連線查詢的特點是左、右兩端表中的元組都輸出,如果沒能找到匹配的元組,就使用NULL來代替。
例如:同左外連線例子內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表FULL OUTER JOIN選課表ON學生表.學號=選課表.學號
外連線查詢中所有表中的元組信息都得到了保留。

套用示例

【IT168 技術】以MySql為例。在MySQL資料庫中建立兩張數據表,並分別插入一些數據。
<
腳本如下:
drop table table1;
CREATE TABLE `andrew`.`table1`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE1(name, city) values ('Person A', 'BJ');
insert into TABLE1(name, city) values ('Person B', 'BJ');
insert into TABLE1(name, city) values ('Person C', 'SH');
insert into TABLE1(name, city) values ('Person D', 'SZ');
commit;
drop table table2;
CREATE TABLE `andrew`.`table2`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE2(name, city) values ('Person W', 'BJ');
insert into TABLE2(name, city) values ('Person X', 'SH');
insert into TABLE2(name, city) values ('Person Y', 'SH');
insert into TABLE2(name, city) values ('Person Z', 'NJ');
commit;
1. 外連線 – 左連線結果
table1居左,故謂之左連線。這種情況下,以table1為主,即table1中的所有記錄均會被列出。有一下三種情況:
a. 對於table1中的每一條記錄對應的城市如果在table2中也恰好存在而且剛好只有一條,那么就會在
返回的結果中形成一條新的記錄。如上面Person A和Person B對應的情況。
b. 對於table1中的每一條記錄對應的城市如果在table2中也恰好存在而且有N條,那么就會在返回的結果中形成N條新的記錄。如上面的Person C對應的情況。
c. 對於table1中的每一條記錄對應的城市如果在table2中不存在,那么就會在返回的結果中形成一條
條新的記錄,且該記錄的右邊全部NULL。如上面的Person D對應的情況。
不符合上面三條規則的記錄不會被列出。
2. 外連線 – 右連線結果
table2居右,故謂之右連線。這種情況下,以table2為主,即table2中的所有記錄均會被列出。有一下三種情況:
a. 對於table2中的每一條記錄對應的城市如果在table1中也恰好存在而且剛好只有一條,那么就會在
返回的結果中形成一條新的記錄。如上面Person X和Person Y對應的情況。
b. 對於table2中的每一條記錄對應的城市如果在table1中也恰好存在而且有N條,那么就會在返回的結果中形成N條新的記錄。如上面的Person W對應的情況。
c. 對於table2中的每一條記錄對應的城市如果在table1中不存在,那么就會在返回的結果中形成一條
條新的記錄,且該記錄的左邊全部NULL。如上面的Person Z對應的情況。
不符合上面三條規則的記錄不會被列出。
3. 內連線
內連線的數據記錄中,不會存在欄位為NULL的情況。可以簡單地認為,內連結的結果就是在左連線或者右連線的結果中剔除存在欄位為NULL的記錄後所得到的結果。甚至可以認為,如果兩個表中僅分別剩下內連線運算後所得的數據記錄,如table1中只有Person A、Person B和Person C,table2中只有Person W、Person X和Person Y,那么這兩個表的之間的左連線和右連線的返回的結果是一樣的。
注意:select * from table1 a inner join table2 b on a.city = b.city 和select * from table1 a join table2 b on a.city = b.city 的效果是一樣的,即如果join的左邊沒有諸如left、right或者inner這樣的關鍵字時,預設的是內連線。另,MySQL不支持full join。

相關詞條

熱門詞條

聯絡我們