面試中sql多表查詢的問題!!!
面試中遇到的,這個問題其實不難,只是工作很多時候細節不會去多想,然後搞得關鍵時間掉鏈子!!!
student表 ↓
teacher表 ↓
student(關聯欄位沒有資料情況)、teacher表資料
student(關聯欄位有資料情況)
上面是teacher和student表,和相關的資料;
問題就是當student資料表中teacher的id_tid全為null,和有資料如圖所示的時候,作連線、內連線和右連線結果有多少行;
sql語句差不多這樣寫
1、select s.* , t.* from teacher t left join student s on (t.tid=s.s_tid) ;
2、select s.* , t.* from teacher t inner join student s on (t.tid=s.s_tid) ;
3、select s.* , t.* from teacher t right join student s on (t.tid=s.s_tid) ;
a、當s_tid全為null的時候;
1、2、3資料行數分別為:2、0、 5;
b、當s_tid有資料的時候;
1、2、3資料行數分別為:3、 3、 5;
之所以,掉鏈子。主要是因為對sql掌握不好,而且工作當中沒有去注意細節,通常直接會通過資料庫查詢出結果,不知道其所以然。
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join(等值連線) 只返回兩個表中聯結欄位相等的行
以前總是a left join b, a表的資料都顯示,而不會注意b表是否對應多行,認為a表有幾行就是幾行,沒有注意“聯結欄位相等的記錄