為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

適用人群

SQL很熟練的就不用看了,我這裡是偏基礎的

平時SQL寫的少總結也少的程序員,今天我們一起總結複習下

關鍵是思路,很多SQL寫不出來是因為平時對思路不明確

把常見SQL函數語法套路搞熟悉了,一般需求都不會有問題的

本文章是MYSQL

SQL相關歷史文章

【這是我總結的SQL基礎】



  • 學生表:Student(SID,Sname,Sage,Ssex)SID 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
  • 成績表:score(SID,CID,score) --SID 學生編號,CID 課程編號,score 分數

成績表

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

學生表

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

繼續出幾個題目大家一起學習下SQL玩法

縱向比較、橫向比較、分組、統計、join

1、查詢"01"課程比"02"課程成績高的學生的信息及課程分數

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

思路總結:

  • 這是精確查詢需求 一般都用內連接 inner join
  • 這裡比較2個課程的分數,關聯一張成績表不好比較,2張成績表就容易比較了,原因是關聯兩張成績表會讓列名增加,在一行數據中去比較成績分數SQL也容易寫了,橫向比較思路
  • 把兩成績表分別通過條件過濾掉,然後比較分數

2 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

思路總結:

  • 查所有學生的什麼的信息,第一要想到學生表的左連接查詢 left join
  • 選課總數、所有課程總成績,要想到統計函數count 、sum
  • 統計函數知道後,還要知道group by 分組函數怎麼配合統計函數去工作

有了上面的思路基本SQL已經問題不大。

細節注意group by後面一定要跟能分組的列名才行,上面例子能分組的肯定是學生ID,

一個學生ID會對應多個成績數據,題目也是說要統計學生的什麼什麼數據情況。

3 查詢所有課程都及格60學生情況

第一步 普通左連接

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

第二部 加分組 統計函數等

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

比較簡單思路

不用HAVING函數一樣是可以查處理就SQL難看點,需要嵌套子查詢

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

思路分析:

  • 題目是查所有學生的什麼,馬上向到學生左連接 left join
  • 所有課程都及格,需要統計,統計的維度是學生,因此group by 學生ID,分組學生ID時,請看分數和課程ID都可以統計函數去處理了
  • 要所有課程都及格,這裡所有課程就3門先寫死了 HAVING count(b.CID)=3

4.查詢各科成績最高分、最低分和平均分

需要引入課程表 course

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

結果

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

思想分析:

  • 最高、最低、平均,馬上想到統計函數們max min avg
  • 查詢所有成績,馬上想到 成績表左連接 left join
  • 統計函數有了,當然要想到分組維度是課程ID

5 統計各科成績各分數段人數:課程編號,課程名稱, 100-85 , 85-70 , 70-60 , 0-60

為了在面試官面前輕鬆完成手寫SQL的面試題,平時多積累技巧

思路分析

  • 統計什麼,馬上統計函數想到 sum
  • 查詢各科分數段的情況,需要找出範圍後統計數量,這裡就需要 case when then else end 幫助了,想不到它基本就沒好解決思路了
  • 利用case把相應範圍內分數的數量過濾出來,配合SUM統計總數據
  • 統計肯定要分組group by 配合,很明顯分組維度是課程

總結

  • SQL結果不重要,總要的是寫SQL過程中想到的思路
  • 思路清晰,題目在怎麼變化也離開不了SQL的基本知識
  • SQL函數有很多,平時大家多積累吧


分享到:


相關文章: