1. 程式人生 > >面試中sql多表查詢的問題!!!

面試中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表有幾行就是幾行,沒有注意“聯結欄位相等的記錄 

”後面部分的內容。一個是沒有理解到位,還有一個就是網上的例子給得很有迷惑性,讓人很容易忽略後半段,工作那麼久了,平時只會寫寫功能,做做需求,做得都是一些copy paste的工作。很多細節,基本性的東西不求甚解,活該只會搬磚。