查詢最開始的登錄記錄

本題來自公衆號:SQL數據庫開發
https://mp.weixin.qq.com/s/qzYI_ZrIylznn8vvBE3SjA
題目
SELECT a.player_id,a.device_id
from test01 a
INNER JOIN
(SELECT player_id,MIN(event_date) as ‘ss’
from test01 b
GROUP BY player_id) c ON a.player_id = c.player_id and a.event_date = c.ss

面試知識點

知識點1:左,右,內連接區別
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯結字段相等的行
知識點2:條件在on和where的區別
在使用left jion時,on和where條件的區別如下:
1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否爲真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不爲真的就全部過濾掉。
知識點3:sql 關聯爲什麼小表在前更有效率
小表在前的本質
小表在前的本質其實就是以小表作爲驅動表能夠優化效率,而驅動表只能在前。
爲什麼驅動表只能在前?
關聯操作時,涉及到不同表數據的連接,轉移,合併,這些操作必須得有個表作爲帶頭,即驅動表,但是對於x join y join z 關聯操作,x,y,z並列,程序只會以 x 作爲驅動表
爲什麼小表作爲驅動表能夠優化效率?
關聯操作本質上其實就是掃描驅動表數據,根據條件,逐一去大表找數據,由小表作爲驅動表,小表數據少,那麼去大表找數據時,能減少數據的找尋量。體現在底層上也就減少了網絡的IO,內存,自然效率就高
歡迎掃一掃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章