資料表的連線有:1、內連線(自然連線): 只有兩個表相匹配的行才能在結果集中出現
2、外連線: 包括
(1)左外連線(左邊的表不加限制)
(2)右外連線(右邊的表不加限制)
(3)全外連線(左右兩表都不加限制)
3、自連線(連線發生在一張基表內)
內連線:一、內連線
內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:
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,此為系統預設),
但這種方法不能再用left join等外連線了
select *
from [book] as b inner join [student] as s
on b.studentid=s.studentid
這種方法還可以加and條件,並且後面可能接著用left join等外連線
結果為:
執行過程
相當於內連線的向右連線。以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
結果
執行過程
即以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
結果
執行過程
即以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的右表無條件拼接過來。這樣依次執行,這樣這種記錄便為兩個表的記錄的笛卡爾積。
-- 查詢每個**商 最大的** ,並且排序
select s_id,max(f_price) as '貴' from fruits group by s_id order by 貴;
-- 多表鏈結查詢 --內連線
select f.f_name,s.s_name
from fruits f ,suppliers s
-- 用標準語法
select * from fruits f
inner join suppliers s on f.s_id = s.s_id
-- 自連線--用fruits 這張表就可以解決
select f2.s_id,f2.f_name from fruits f1, fruits f2 where f1.f_id=f2.f_id;
-- 外連線 左連線 :
select f.s_id,s.s_name from fruits f right join suppliers s on f.s_id=s.s_id;
-- 外連線 右鏈結
select f.s_id,s.s_name from fruits f left join suppliers s on f.s_id =s.s_id;
連線 交叉連線 內連線 外連線 自連線
本文非原創 可分為 交叉連線 內連線 外連線 自連線 1.使用交叉連線 它是非限制連線,就是將兩個 不加任何條件的組合在一起,即第乙個 的所有記錄分別和第二個 的每一條記錄相連線 組合成新的記錄,連線後結果集的行數是兩個 的行數的乘積,列為兩表列之和。語法 1 select 列名列表 from 表名...
內連線 外連線 交叉連線
一 連線查詢 根據兩個表或者多個表的列之間的關係,從這些表中查詢資料。目的 實現多個表查詢操作。二 連線型別 連線分為三種 內連線 外連線 交叉連線。1 內連線 使用比較運算子 包括 和 進行表間的比較操作,查詢與連線條件相匹配的資料。根據比較運算子不同,內連線分為等值連線和不等連線兩種。1.1 等...
內連線 外連線 交叉連線總結
本篇文章總結了一下sql中的五種連線 內連線 左外連線 右外連線 全連線 交叉連線 一 內連線 full join full outer join 內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種 1 等值連線 在連線條件中使用等於號 運算子比較被連線列的列...