我們將以下面演示資料為例開展相關SQL語法練習,演示資料涉及學生資訊表、教師資訊表、課程資訊表、成績資訊表,具體建表語句及資料如下:
學生資訊表
我們向學生資訊表中插入如下4條資料:
教師資訊表
我們向教師資訊表中插入如下3條資料:
課程資訊表
我們向課程資訊表中插入如下3條資料:
成績資訊表
我們向成績資訊表中插入如下11條資料:
1 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的平均成績。
上述SQL執行結果如下:
2 查詢平均成績高於60 分的學生編號和學生姓名和平均成績。
在該例子中用到了 any_value 函式,該函式有什麼作用呢,如下:
使用內連線,同樣可以實現查詢平均成績高於60 分的學生編號和學生姓名和平均成績,如下。
3 獲取各課程的平均成績,降序排列,若平均成績相同時,按課程編號升序排列。
4 獲取數學(Math)課程成績不低於90分的學生學號、姓名班級、成績資訊。
5 獲取語文(Chinese)課程成績不超過60分的學生學號、姓名班級、成績資訊,按分數降序排列的學生資訊。
6 獲取班級的數學(Math)課程平均成績大於90分的班級。
7 獲取沒有缺考的學生的學號、姓名、班級資訊。
8 獲取所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)
相關閱讀:
學以致用,語法基礎實戰: https://www.toutiao.com/i6743064663044407815/
學以致用,語法進階實戰: https://www.toutiao.com/i6743066018496659981/
學以致用,語法強化實戰: https://www.toutiao.com/i6743141851047395854/
我們將以下面演示資料為例開展相關SQL語法練習,演示資料涉及學生資訊表、教師資訊表、課程資訊表、成績資訊表,具體建表語句及資料如下:
學生資訊表
我們向學生資訊表中插入如下4條資料:
教師資訊表
我們向教師資訊表中插入如下3條資料:
課程資訊表
我們向課程資訊表中插入如下3條資料:
成績資訊表
我們向成績資訊表中插入如下11條資料:
透過上述SQL我們可以建立 學生、教師、課程、成績資訊表,並插入樣例資料,產生如下演示資料:練習如下1 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的平均成績。
上述SQL執行結果如下:
2 查詢平均成績高於60 分的學生編號和學生姓名和平均成績。
上述SQL執行結果如下:
在該例子中用到了 any_value 函式,該函式有什麼作用呢,如下:
自 MySQL5.7版本之後,sql_mode 中 only_full_group_by 模式預設為開啟狀態。only_full_group_by 就是確定 select target list 中的所有欄位都是明確語義,即在此模式下 select target list 中的欄位 要麼是來自於聚合函式(sum、avg、max等)的結果,要麼是來自於 group by 中的表示式的值,除此之外都將觸發異常。因此,MySQL提供了any_value 函式來抑制 only_full_group_by 值被拒絕,any_value 會選擇被分到同一組的資料裡第一條資料的指定欄位值作為返回資料。使用內連線,同樣可以實現查詢平均成績高於60 分的學生編號和學生姓名和平均成績,如下。
3 獲取各課程的平均成績,降序排列,若平均成績相同時,按課程編號升序排列。
上述SQL執行結果如下:
4 獲取數學(Math)課程成績不低於90分的學生學號、姓名班級、成績資訊。
上述SQL執行結果如下:
5 獲取語文(Chinese)課程成績不超過60分的學生學號、姓名班級、成績資訊,按分數降序排列的學生資訊。
上述SQL執行結果如下:
6 獲取班級的數學(Math)課程平均成績大於90分的班級。
上述SQL執行結果如下:
7 獲取沒有缺考的學生的學號、姓名、班級資訊。
上述SQL執行結果如下:
8 獲取所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)
相關閱讀:
學以致用,語法基礎實戰: https://www.toutiao.com/i6743064663044407815/
學以致用,語法進階實戰: https://www.toutiao.com/i6743066018496659981/
學以致用,語法強化實戰: https://www.toutiao.com/i6743141851047395854/