SQL 連接(內連接,外連接)


內連接

現在有兩張表,學生表student1,成績表SC1,兩張表的數據如下

 

現在要對兩張表做連接查詢,連接一般需要寫條件,where 或者 on 后面 ,

select * from student,SC where student.sid=SC.sid   from 后面直接寫兩個表名,這樣寫等價於內連接 如果不寫 where 條件,相當於笛卡爾積。

 帶有 where 條件 相當於內連接

A(inner,left,right) join B on A.1=B.1   on 不寫會報錯
select * from student inner join SC on student.sid=SC.sid

 

外連接(左外連接,右外鏈接)

左聯接,是包括 A,B 表的交集 和 A 表的數據 (A eft join B on A.1=B.1),如果 A 表中有的數據 B 表沒有找到相等的,會顯示A表的數據,B表中的部分會為 null ,下面的結果就是成績表中沒有趙六和田七的數據的結果

如果 and 寫在 on 后面,表示的是在做關聯時不關聯被過濾掉的數據,比如上面的數據,寫 and sc.score>60 條件之后,會過濾掉成績<=60的數據,而張三豐每一門課的成績都小於60,但是會有張三豐的數據,只是后面的為null,如下:

上面的數據是過濾掉成績小於60的數據之后,張三豐的成績都小於60,並不是沒有張三豐這個數據了,而是他后面的為null,可以這樣理解,on 后面的 and 條件是代表關聯與否,不滿足就不關聯,但A表的數據還是要全部都有的。

如果成績>60是寫在where 里的,where 是對結果進行過濾的,所以會把上面的結果不滿足成績>60的數據過濾掉,即:

右外鏈接,同左外鏈接一樣,包括並集和B表的數據。

學生表和成績表做又外連接的時候,成績表中有一條 1008 的數據在學生表中沒有,結果如下:

對上面的結果進行 成績 >60 的條件過濾

可以看到寫在 on 后 和 where 后結果是不同的,可以理解為,寫在 on 后面的條件如果不滿足就不和另外一個表進行關聯,但是他的數據還是會在結果中顯示。對於要顯示全部數據的那張表。

自連接,在這里就先不說了。以后再說。


免責聲明!

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



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