SQl 語句 表的連接


當涉及到多個表查詢時就需要使用將表連接的方法進行查詢。

SQL語句連接的方式根本上分為5種:

1 •EQUI JOIN
2 •SEMI JOIN
3 •ANTI JOIN
4 •CROSS JOIN
5 •DIVISION

1.EQUI JOIN

這是最基本的JOIN(連接)操作包括:內連接,左連接,右連接,全連接

內連接:內連接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。

 語法格式:inner join

1 select  *
2 from  Student_One
3 inner join   Student_Two 
4 on  Student_One.sno=Student_One.sno;

左連接:左連接的結果集包括left join 子句中指定的所有的行,不僅僅連接所匹配的行,如果左表的某行在右表中沒有匹配行,在相關聯的結果集行中右表的所有選擇列表為空值。

  語法格式:left join

1 select  *
2 from  Student_One
3 left join   Student_Two 
4 on  Student_One.sno=Student_One.sno;

 

右連接:右連接是左連接的反向連接。返回右表的所有行,如果右表某行在左表沒有匹配行,則左表對應的返回空值。

  語法格式:right join

1 select *
2 from  Student_One
3 right join   Student_Two 
4 on  Student_One.sno=Student_One.sno;

全連接:返回左表和有右表中的所有行(有匹配的返回匹配的行)。當某行在另一個表中沒有匹配時,另一個表的選擇列表列包含空值。如果有匹配行,則整個結果集行包含基表的數據值。

  語法格式:full join

1 select *
2 from  Student_One
3 full join   Student_Two 
4 on  Student_One.sno=Student_One.sno;

交叉連接:交叉連接返回左表中的所有行,左表的每一行與右表所有行組合。交叉連接也叫笛卡兒積。

注意:交叉連接有兩種,顯式和隱式的,沒有on子句,返回的是兩表的笛卡爾積。

隱式:

1 select *
2 from  Student_One,Student_Two

顯式:

1 select *
2 from Student_One
3 cross join Student_Two;

from子句中的表或者視圖可通過內連接或全連接按任意順序指定;但是用左連接或右連接指定表或視圖的順序很重要。

2.SEMI JOIN

這種連接關系在SQL中有兩種表現方式:使用IN 或者 使用EXITS。

IN 比 EXITS 的可讀性好

EXITS 比 IN 的表達性好(適合復雜的語句)

例子:

1 -- Using IN
2 select *
3 FROM author
4 where author.id IN (select book.author_id from book)
5  
6 -- Using EXISTS
7 select *
8 from author
9 where EXISTS (select 1 from book where book.author_id = author.id)

 

3.ANTI JOIN

這種連接的關系和SEMI JOIN 相反。在 IN 或 EXITS 前加 NOT 關鍵字

1 -- Using IN
2 select *
3 from author
4 where  author.id NOT IN (select book.author_id from book)
5  
6 -- Using EXISTS
7 select *
8 from  author
9 where NOT EXISTS (select 1 from book where book.author_id = author.id)

 

多表連接時SQl的常用技術 必須掌握!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM