1. 程式人生 > 實用技巧 >第六次實驗

第六次實驗

關於SQL練習2的一些寫法。。。查詢選修人數超過2人且成績都在60分以上的課程 查詢選修張老師講授所有課程的學生 計算並填寫學生獲得的總學分

10-1 查詢沒有選修’C語言’課程的學生 (10分)
本題目要求編寫SQL語句, 檢索出沒有選修’C語言’課程的學生記錄,輸出結果集按照學號升序排序。

提示:請使用SELECT語句作答。請使用not exist實現。

select sno as 學號,sname as 姓名 from stu
where sno not in在這裡插入程式碼片
(select distinct sno from sc where
not exists(select * from cou where cou.cno = sc.cno and cname != ‘C語言’) )

order by sno asc;
10-2 查詢S001學生選修而S003學生未選修的課程 (10分)
本題目要求編寫SQL語句, 檢索出 sc表中學號為S001的學生選修的而S003學號學生未選修的課程號。

提示:請使用SELECT語句作答。MySQL不允許使用 except語句。

select cno as 課程號 from sc
where cno not in(
select s1.cno as 課程名 from sc s1 join sc s2
on s1.cno = s2.cno
where
(s1.sno = ‘s001’ and s2.sno = ‘s003’)) and sno = ‘s001’;
10-4 查詢平均分高於80分的學生 (10分)

本題目要求編寫SQL語句, 查詢平均分高於80分的學生姓名。

提示:請使用SELECT語句作答。

select sname from stu
where sno in
(
select sno from sc group by sno having avg(grade) >= 80);

10-5 查詢選修張老師講授所有課程的學生 (10分)
本題目要求編寫SQL語句, 查詢選修了張老師所講授的所有課程的學生。

提示:請使用SELECT語句作答。

select sname
from stu
where not exists
(select *
from cou
where not exists
(select *

from sc
where sc.sno=stu.sno and sc.cno=cou.cno) and cou.teacher = ‘張老師’)
10-6 計算並填寫學生獲得的總學分 (10分)
本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分並填寫在stu表中的totalcredit欄位。

其中,總學分為每個學生通過的選修課程的學分數總和,注意:只有在60分以上的選課成績才能獲得該門課程的學分數,每門課程的學分數在cou表中credit欄位。

update stu,(select sno sno,sum(credit) total
from
(select sc.sno sno,case when sc.grade>=60 then credit else NULL end credit
from stu
join sc on sc.sno = stu.sno
join cou on sc.cno = cou.cno
group by sc.sno,credit,grade) nstu1
group by sno) nstu2
set stu.totalcredit = nstu2.total
where stu.sno = nstu2.sno;

這題放這兒感覺有點超標,用到後面的when then等了。

10-7 通過圖書表和借閱表,查詢圖書的借閱情況,要求結果中包括以下幾列:賬號,條形碼,書名和借書日期 (10分)
本題目要求編寫SQL語句,通過圖書表和借閱表,查詢圖書的借閱情況,要求結果中包括以下幾列:賬號,條形碼,書名和借書日期

提示:請使用SELECT多表查詢的方法。

select 借閱.賬號,借閱.條形碼,圖書.書名,借閱.借書日期 from 圖書 join
借閱
on 圖書.條形碼 = 借閱.條形碼
10-8 查詢軟體工程專業中年齡最大的同學姓名 (10分)
本題目要求編寫SQL語句, 查詢軟體工程專業中年齡最大的同學姓名.

提示:請使用SELECT語句作答。

select sname from stu
where mno = (select mno from major where mname = ‘軟體工程’)
and birdate =
(select min(birdate) from stu)
10-9 查詢選修了“C語言”課程,但是沒有選修“資料結構”課程的學生 (10分)
本題目要求編寫SQL語句,查詢選修了“C語言”課程,但是沒有選修“資料結構”課程的學生姓名。

提示:請使用SELECT語句作答。

select sname from stu where sno in(
select distinct sno from sc where sno in(
select sno from sc
where sno not in
(select sno from sc where cno = ‘c003’) and cno = ‘c002’))
(select sno from sc where cno = ‘c003’) and cno = ‘c002’)) 中也可以用子查詢查出等於
“C語言“以及不等於“資料結構”的cno。

10-10 查詢選修課程超過2門且成績都在80分以上的學生 (10分)
本題目要求編寫SQL語句,查詢選修課程超過2門且成績都在80分以上的學生的姓名、專業及總學分。

提示:請使用SELECT語句作答。

select sname 姓名,mno 專業,sum(credit) 總學分 from stu join
sc on stu.sno = sc.sno join cou
on sc.cno = cou.cno
group by sname,mno
having count(sc.cno) >= 2 and min(grade) >=80;
10-11 查詢選修人數超過2人且成績都在60分以上的課程 (10分)
本題目要求編寫SQL語句,查詢選修人數超過2人且成績都在60分以上的課程的課程名、最高成績、最低成績和平均成績。

提示:請使用SELECT語句作答。

select sc.cno 課程號,cname 課程名,max(grade) 最高成績,min(grade) 最低成績,avg(grade) 平均成績 from sc join
cou on sc.cno = cou.cno
group by sc.cno,cou.cname having count(sc.cno) > 2 and min(grade) >= 60 and count(*) = count(grade )