MySQL語句難題終結(jié)者

因為一段時間不用mysql后有些東西會忘記,寫來
一來為提供給以后加速回憶起相關(guān)語句
二來博各位大佬一笑

sql語句萬能公式法

1 . sql語句三部分:what(要得到什么select后面的東西) from(從哪些表,最好直接join on )condition(where ,group by ,having,order by ,limit 這類十分easy 就沒必要單獨拿出來了)
舉個栗子
select a.id ,a.name (what部分)
from t_student a join t_course b on t_student.cid =t_course.id (from 部分 基本就是直接寫表名然后加上join ,再加你的條件)
where a.id>1 group by a.cid(一些條件語句)
2 .不行就用上面結(jié)果作為表再來一次select

ps:

  • 基本上select 和from 好寫 ,難的是condition,也就是怎么把題意翻譯成sql語句
  • 我的建議是先寫where(主要是效率問題,where是先做把臨時表篩選了),再寫group by (注意group by 只是分組,所以數(shù)據(jù)還是那么多,只是每組只能顯示該分組的第一條(畢竟數(shù)據(jù)庫記錄查出來是個二維結(jié)構(gòu),不能再立體了),所以聚合函數(shù)只能在group by 中用,因為where 根本就沒有分組,怎么聚合),之后寫分組后的having
  • 關(guān)于多表join 我建議甭管多少表,一次先join兩個再來,把問題簡單化(不知道這么做算不算最優(yōu)解,暫時不考慮吧,但是一定是多表的萬能解)

相關(guān)概念的解釋,重要的例子

  • join on 和where
    直接貼個大佬寫的吧,他寫的還不錯
    https://www.cnblogs.com/Jessy/p/3525419.html
  • where 和group by
    可見其實看過以上后,where的語句其實相當(dāng)好寫,問題再于group by 后面的聚合函數(shù)的應(yīng)用,常見的聚合函數(shù)有哪些
    簡單來說就五個,avg,count ,min,max,sum
    具體見這位大佬博客,介紹的很詳細
    https://www.cnblogs.com/geaozhang/p/6745147.html
  • 集合中的交并補等,或者說是兩個結(jié)果之間的運算
    這類問題也比較常見,單獨整理下
    主要就是畫下韋恩圖,用左右連接,where 中寫某些字段是不是null之類的條件
    這位大佬寫的還行,就是沒有具體的韋恩圖,看著不是很形象,你們先看他的吧,我到時候自己寫個更容易理解的,更方便的(要面試了,沒時間)
    https://blog.csdn.net/sanzhongguren/article/details/76615464
  • 一道由于group by 只能查詢聚合函數(shù)中的字段導(dǎo)致的問題
    三個字段,sid(學(xué)生id),cid(課程id) ,score(分數(shù))
    在student_course表查詢各科成績最高的學(xué)生,結(jié)果列出學(xué)生id、課程id和對應(yīng)的成績 你可能會這樣寫:
    select sid,cid,max(score) from student_course group by cid;
    然而上面是不對的,因為 使用了group by的查詢字段只能是group by中的字段或者聚集函數(shù)或者是每個分組內(nèi)均相同的字段。 雖然不會報錯,但是sid是無效的,如果去掉sid的話只能查出沒門課程的最高分,不包含學(xué)生id。 本題的正確解法是使用相關(guān)嵌套查詢:
    select * from student_course as x where score>=
    (select max(score) from student_course as y where cid=x.cid);
    相關(guān)子查詢也就是在進行內(nèi)層查詢的時候需要用到外層查詢,有一些注意事項:
    子查詢一定要有括號
    as可以省略
    使用相關(guān)查詢;>=max等價于>=all,但是聚合函數(shù)比使用any或all效率高
    相關(guān)子查詢和嵌套查詢見這位大佬的解釋
    https://www.cnblogs.com/Ryan_j/archive/2010/10/20/1857026.html
    相當(dāng)于()中的先在類中進行比較,再從外面的表拿數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容