SQL連線查詢 最全面

2021-08-04 17:07:58 字數 2890 閱讀 3083

連線查詢是關聯式資料庫中最主要的查詢,主要包括內連線外連線交叉連線等。通過連線運算子可以實現多個表查詢。

在關聯式資料庫管理系統中,表建立時各資料之間的關係不必確定,常把乙個實體的所有資訊存放在乙個表中。當檢索資料時,通過連線操作查詢出存放在多個表中的不同實體的資訊。

連線操作給使用者帶來很大的靈活性,他們可以在任何時候增加新的資料型別。為不同實體建立新的表,然後通過連線進行查詢。

外連線

內連線是一種最常用的連線型別。內連線查詢實際上是一種任意條件的查詢。使用內連線時,如果兩個表的相關字段滿足連線條件,就從這兩個表中提取資料並組合成新的記錄,也就是在內連線查詢中,只有滿足條件的元組才能出現在結果關係中。

--例如:要查詢每個已經選課的學生的情況,查詢語句為

--等值連線

select *

from student inner

join sc

on s.sno = sc.sno

--實際使用中常常省略inner

join

select * from student,sc where s.sno = sc.sno

--自然連線

select *

from student natural

join sc

on s.sno = sc.sno

根據比較方式不同,內連線又可以分為三種:

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

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

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

如果在乙個連線查詢中,涉及到的兩個表都是同乙個表,這種查詢就稱為自連線查詢。同一張表在from字句中多次出現,為了區別該錶的每一次出現,需要為表定義乙個別名。

自連線是一種特殊的內連線,它是指相互連線的表在物理上為同一張表,但可以在邏輯上分為兩張表。

--要求檢索出學號為20210的學生的同班同學的資訊,查詢語句為

select s.*

from s join s as s1 on s.class = s1.class

where s1.sno='20210'

內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組資訊。比如,我們想知道每個學生的選課情況,包括已經選課的學生(這部分學生的學號在學生表中有,在選課表中也有,是滿足連線條件的),也包括沒有選課的學生(這部分學生的學號在學生表中有,但在選課表中沒有,不滿足連線條件),這時就需要使用外連線。

外連線是只限制一張表中的資料必須滿足連線條件,而另一張表中的資料可以不滿足連線條件的連線方式。

注:以下例子實際使用中outer關鍵字通常會省略。

1)左外連線(left outer join)

如果在連線查詢中,連線管子左端的表中所有的元組都列出來,並且能在右端的表中找到匹配的元組,那麼連線成功。如果在右端的表中,沒能找到匹配的元組,那麼對應的元組是空值(null)。這時,查詢語句使用關鍵字left outerjoin,也就是說,左外連線的含義是限制連線關鍵字右端的表中的資料必須滿足連線條件,而不關左端的表中的資料是否滿足連線條件,均輸出左端表中的內容。

--左外連線查詢中左端表中的所有元組的資訊都得到了保留。

--要查詢所有學生的選課情況,包括已經選課的和還沒有選課的學生,查詢語句為

select sno,sname,class,cno,grade

from s left

outer

join sc

on s.sno = sc.sno

2)右外連線(right outer join)

右外連線與左外連線類似,只是右端表中的所有元組都列出,限制左端表的資料必須滿足連線條件,而不管右端表中的資料是否滿足連線條件,均輸出表中`的內容。

--右外連線查詢中右端表中的所有元組的資訊都得到了保留

--同上例內容,查詢語句為

select sno,sname,class,cno,grade

from s right

outer

join sc

on s.sno = sc.sno

3)全外連線(full outer join)

全外連線查詢的特點是左、右兩端表中的元組都輸出,如果沒能找到匹配的元組,就使用null來代替。

--全外連線查詢中所有表中的元組資訊都得到了保留。

--同左外連線例子內容,查詢語句為

select sno, sname, class,cno,grade

from s full

outer

join sc

on s.sno = sc.sno

交叉連線即笛卡兒乘積,是指兩個關係中所有元組的任意組合。一般情況下,交叉查詢是沒有實際意義的。(實際應用中不會使用到)

--如果希望得到學生表和選課表兩個關係模式的笛卡爾乘積,查詢語句為

select*

from s cross

join sc

參考資料:

適合快速入門)

SQL 連線查詢

連線查詢是指乙個查詢同時涉及到兩個及以上的表。包括 等值連線,自然連線,非等值連線,自身連線,外連線,復合查詢.等.color red size large 1.等值連線 於非等值連線 size color 查詢每個學生及選課的情況 select student.sc.from student,sc...

sql連線查詢

sql連線查詢的連線查詢分為交叉連線 內連線 外連線。以下面兩張表為例演示連線查詢。a表 b表 分為左連線 右連線 完全外連線 左連線 left join 或left outer join select from a left outer join b on a.aid b.bid返回結果 返回a表...

SQL連線查詢

筆記區 多表連線查詢 1,等值連線 select from table1,table2 where table1.t1no table2.t2no 2,非等值 笛卡爾積 特點 查詢個數為乘積 作用 模擬大量資料 交叉連線 自連線內連線 把符合條件的查出來 以上都是內查詢 外連線 可以把不存在員工的部...