inner join 與 left/right join的區別淺談
最近遇到了一個關於join查詢與left/right join查詢區別的問題,在之前並沒有去真正去思考過這兩者的區別,在看到這個問題的時候我的第一反應是覺得join與left/right join的區別應該就是基本表的區別,不知道是在哪裡看到過相應的文章還是怎麼樣,並且強烈的認為這肯定就是標準答案,被朋友去建議自己嘗試一下去證明一下這個猜想。
猜想開始:
一:建立班級和學生表並寫入假資料,
班級表:
學生表:
二:測試查詢育英班的學生
(1) inner join: select class.cid,class.infos,student.sid,student.sname from class join student on class.cid=student.cid and class.cid=1;
(2) left join: select class.cid,class.infos,student.sid,student.sname from class left join student on class.cid=student.cid and class.cid=1;
(3) right join: select class.cid,class.infos,student.sid,student.sname from class right join student on class.cid=student.cid and class.cid=1;
看到結果之後我在考慮剛剛所提到的基本表的事情,我現在認為有基本表這一層概念在裡面,但是最根本的問題不是基本表的事情,而是依靠強大的數學背景下的集合的問題。把班級和學生看成集合A和B,inner join是取出兩個集合中間共同相等的部分,left join是以左邊集合為基本集合全部取出,取出右面中與左邊集合的交集部分,right join同理。本人數學不太好,大家可以自行翻查資料來證實或推翻我現在的想法。