把“SC”表中“葉平”老師教的課的成績都更改爲此課程的平均成績

前言

做數據庫sql練習,遇到的此問題,自己第一次寫有些複雜,想在網上搜尋下比較簡潔高效的寫法,但是幾乎都是複製粘貼,錯誤的也在複製粘貼,半天找不到比較高質量的,還是自己寫一下吧(建表語句不在此處列出),有更高效簡潔的寫法,歡迎留言評論。

實現過程

mysql實現

#1.查詢葉平的課程號
 

SELECT c1.cno FROM course c1 ,teacher t1 WHERE c1.tno=t1.tno and t1.tname='葉平';

#2.分別求成績表SC中葉平的課程號對應課程的平均成績
 

SELECT cno,AVG(score) ascore FROM SC WHERE cno in
(SELECT c1.cno FROM course c1 ,teacher t1 WHERE c1.tno=t1.tno and t1.tname='葉平')GROUP BY cno;

#3.根據第2步的平均成績(看做是一個平均成績表)和SC學生成績表,通過課程號cno 去匹配對應的學生成績並修改爲對應課程的平均成績

最終的的sql:

UPDATE SC s1 INNER JOIN (
SELECT cno,AVG(score) ascore FROM SC WHERE cno in
(SELECT c1.cno FROM course c1 ,teacher t1 WHERE c1.tno=t1.tno and t1.tname='葉平')GROUP BY cno) s2
SET s1.score = s2.ascore WHERE s1.cno=s2.cno ;

注:

在mysql中INNER JOIN 內連接可以簡寫爲JOIN,LETF JION 與RIGHT JION 則不能簡寫

在執行第三步時,可以先查詢下內連接展示的數據是否正確,查詢語句如下(如果使用左連接或者右連接,匹配不到的左連接左表或者右連接右表數據對應的值會顯示爲null)

SELECT * FROM SC s1 INNER JOIN (
SELECT cno,AVG(score) ascore FROM SC WHERE cno in
(SELECT c1.cno FROM course c1 ,teacher t1 WHERE c1.tno=t1.tno and t1.tname='葉平')GROUP BY cno) s2
WHERE s1.cno=s2.cno;

 

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