當涉及到多個表查詢時就須要使用將錶鏈接的方法進行查詢。spa
SQL語句鏈接的方式根本上分爲5種:code
1 •EQUI JOIN 2 •SEMI JOIN 3 •ANTI JOIN 4 •CROSS JOIN 5 •DIVISION
1.EQUI JOINblog
這是最基本的JOIN(鏈接)操做包括:內鏈接,左鏈接,右鏈接,全鏈接class
內鏈接:內鏈接使用比較運算符根據每一個表共有的列的值匹配兩個表中的行。select
語法格式: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的經常使用技術 必須掌握!