天天看點

sql join 子查詢_SQL中各種子查詢

子查詢是我在刷題過程中最為頭疼的部分,子查詢根據用途不同又可分為子查詢、标量子查詢、關聯子查詢,現在把知識點系統地捋一遍。

子查詢

是什麼:一次性的視圖,臨時表

運作順序:先子查詢,後外部查詢

in,any,all的使用

    • In (SELECT XX from……)
    • Any:比較運算符+any:>any(子查詢),隻要大于子查詢中其中1個值,就傳回結果
    • All:>all(子查詢):大于all中所有值

注意事項

    • 子查詢前不能進行數學運算
      • A/3 > all(b) 對
      • A > 3*all(b) 錯
    • 避免使用多層嵌套子查詢,難以看懂
    • 子查詢名稱最好不要省略

标量子查詢

是什麼:隻能傳回一行一列的查詢結果,單一值

使用場景:可以和比較運算符一起使用,任何使用單一值的場景均可使用,不能傳回多行

關聯子查詢

關聯子查詢是之前我尤其疑惑的,不明白為什麼子查詢裡的條件會對外部查詢起作用,這次去查了下發現,雖然關聯條件寫在子查詢裡,但對外部查詢也起作用,相當于分組後每組的資料運作一次,原理詳見:

sql join 子查詢_SQL中各種子查詢

參考:https://www.cnblogs.com/heenhui2016/p/10574695.html

使用場景:在每個組裡進行比較時使用關聯子查詢

常用函數彙總

基本函數

count,sum,avg,min,max

算術函數
      • 四舍五入:round(數值,保留小數位數)
      • 絕對值:abs(數值)
      • 求餘數:mod(被除數,除數)
字元串函數
      • 字元串長度:length(字元串)
      • 大小寫轉換:lower(),upper()
      • 字元串拼接:concat(字元串1,字元串2)
      • 字元串替換:replace(字元串,被替換字元串,用什麼字元串替換)
      • 字元串截取:substring(字元串,截取起始位置,截取長度)
日期函數
      • 目前日期:current_date
      • 目前時間:current_time
      • 目前日期和時間:current_timestamp
      • 擷取日期的年月日:year(日期),month(日期),day(日期)
      • 日期對應星期幾:dayname(日期)

子查詢練習

練習網站:sqlzoo

sql join 子查詢_SQL中各種子查詢

world表格

思路:子查詢篩選出俄羅斯人口。外部查詢篩選出大于俄羅斯人口的國家

sql join 子查詢_SQL中各種子查詢

思路:子查詢篩選出英國人均gdp。外部查詢用where和标量子查詢篩選人均gdp和歐洲

sql join 子查詢_SQL中各種子查詢

思路:考察子查詢中in的用法

sql join 子查詢_SQL中各種子查詢

思路:考察标量子查詢的用法,和比較運算符相結合

sql join 子查詢_SQL中各種子查詢

思路:考察标量子查詢在select子句中的使用,以及concat,round函數

sql join 子查詢_SQL中各種子查詢

思路:運用子查詢中的all,同時注意存在null值時需要對資料進行篩選,因為null不參與計算

sql join 子查詢_SQL中各種子查詢

思路:運用關聯子查詢和all

sql join 子查詢_SQL中各種子查詢

思路:關聯子查詢,比較name的先後用<=all

sql join 子查詢_SQL中各種子查詢

思路:排除擁有大于25000000人口國家的洲

sql join 子查詢_SQL中各種子查詢

思路:運用子查詢中的all,關聯子查詢同時注意排除自身

sql join 子查詢_SQL中各種子查詢

繼續閱讀