左連線 右連線 交叉連線 全外連線

2022-03-17 06:03:19 字數 3196 閱讀 7594

第一部分、連線查詢

一、內連線

內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:

1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。

2、不等連線: 在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括》、>=、<=、、!《和<>。

3、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。

二、外連線

返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表(左外連線時)、右表(右外連線時)或兩個邊接表(全外連線)中的所有資料行。

三、交叉連線

交叉連線不帶where 子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第乙個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。

第二部分、例項說明

book表:

student表:

一、內連線

select *

from [book] as b,[student] as s

where b.studentid=s.studentid

等價於如下(也可以不要關鍵字inner,此為系統預設)

select *

from [book] as b inner join [student] as s

on b.studentid=s.studentid 或者

select *

from book b ,student s

where b.studentid=s.studentid

結果為:

執行過程

相當於內連線的向右連線。以from  [book] inner join [student]等式右邊為基準,即以student表(等式右表,s表)的s.studentid為基準,遍歷book表(等式左表,book表)中與之匹配的b.studentid,然後拼接返回。結果含有重複的列,b.studentid和s.studentid。

說明這與where b.studentid=s.studentid或者s.studentid=b.studentid位置沒有關係。它僅僅代表滿足條件而已,不判定誰為基準。以下外連線,交叉連線相同操作。

二、外連線

1、左外連線

**select *

from [book] as b left join [student] as s

on b.studentid=s.studentid 或者

select *

from book b ,student s

where b.studentid=s.studentid(+)

結果執行過程

即以from [book] left join [student]的book表為基準,即以book表(b表)的b.studentid為基準。遍歷student表(s表)中與之匹配的b.studentid。若b.studentid含有s.studentid匹配項,則進行拼接,然後遍歷student表的下一條s.studentid,當查詢完畢則進入下一條b.studentid。若b.studentid沒有相應s.studentid匹配項時,則顯示左表的項,拼接右表的項顯示為null。

2、右外連線

**select *

from [book] as b right join [student] as s

on b.studentid=s.studentid 或者

select *

from book b ,student s

where b.studentid(+)=s.studentid

結果執行過程

即以from [book] right join [student]的student表為基準,即以student表(s表)的s.studentid為基準。遍歷book表(b表)中與之匹配的s.studentid。若s.studentid含有b.studentid匹配項,則進行拼接,然後遍歷book表的下一條b.studentid,當查詢完畢則進入下一條s.studentid。若s.studentid沒有相應b.studentid匹配項時,則顯示右表的項,拼接左表的項顯示為null。

3、全外連線

**select *

from [book] as b full outer join [student] as s

on b.studentid=s.studentid 

結果

執行過程

即以from [book] full outer join [student]中先以book表進行左外連線,然後以student表進行右外連線。

三、交叉連線

**select *

from [book] as b cross join [student] as a

order by b.bookid

結果

執行過程

即是按照order排序的id,把要join的右表無條件拼接過來。這樣依次執行,這樣這種記錄便為兩個表的記錄的笛卡爾積。

左連線 右連線 交叉連線 全外連線

第一部分 連線查詢 一 內連線 內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種 1 等值連線 在連線條件中使用等於號 運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。2 不等連線 在連線條件使用除等於運算子以外的其它比較運算...

左連線 右連線 交叉連線 全外連線

第一部分 連線查詢 一 內連線 內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種 1 等值連線 在連線條件中使用等於號 運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。2 不等連線 在連線條件使用除等於運算子以外的其它比較運算...

內連線 左外連線 右外連線 交叉連線區別

有兩個表a和表b。表a結構如下 aid int 標識種子,主鍵,自增id aname varchar 資料情況,即用select from a出來的記錄情況如下圖1所示 圖1 a表資料 表b結構如下 bid int 標識種子,主鍵,自增id bnameid int 資料情況,即用select fro...