我想請教下,有: 學生(學號,姓名,性別,專業) 課程(課程號,課程名...
- 2022-09-24
我想請教下,有: 學生(學號,姓名,性別,專業) 課程(課程號,課程名,授課教師,學分) 選課成績(學號,課程號,成績)三張表
如果根據以上的條件用SQL語句實現一份班級成績單,當然每個人修的課程是一樣的,怎樣實現,高手幫幫!!
declare @str varchar(8000)
declare @sql varchar(8000)
set @str=‘’
select @str=@str+‘,[’+課程名+‘]=max(case when t2。課程號=’‘’+課程號+‘’‘ then t3。成績 end)’ from 課程
set @sql=‘select t1。學號,t1。姓名’+@str+‘,[總成績]=sum(t3。成績) from 學生 t1,課程 t2, 選課成績 t3 where t1。學號=t3。學號 and t2。課程號=t3。課程號 group by t1。學號,t1。姓名’
print @sql
exec(@sql)
最終生成sql語句類似以下效果。
select t1。學號,t1。姓名,
[語文]=max(case when t2。課程號=‘1’ then t3。成績 end),
[數學]=max(case when t2。課程號=‘2’ then t3。成績 end),
[總成績]=sum(t3。成績)
from 學生 t1,課程 t2, 選課成績 t3 where t1。學號=t3。學號 and t2。課程號=t3。課程號 group by t1。學號,t1。姓名
以下圖為例
學號 課號 成績
X1 K1 90
X1 K2 90
X1 K3 90
X2 K1 90
X2 K2 90
X2 K3 90
X3 K1 90
X3 K3 90
則會發現 學號+課號 具有唯一性(鍵或碼的充要條件),單獨的學號或者課號也不具有唯一性,所以不能單獨作為鍵或碼。 同時注意,圖中成績都為90分的話,那麼成績在該表討論 鍵或碼 的問題中是沒有意義的。如果成績改成排名的話,並且強制排名只能具有唯一性的話,排名就可以單獨成為 鍵或碼。
判斷鍵或碼的時候主要是看是否具有唯一性。
所以 C
SELECT
課程。課程名,
學生。姓名,
選課成績。成績
FROM
學生, 課程, 選課成績
WHERE
學生。學號 = 選課成績。學號
AND 課程。課程號 = 選課成績。課程號
select 學號,姓名,成績,課程名 from
學生,課程,選課成績
where 學生。學號=選課。成績學號
and 課程。課程號=選課成績。課程號
你試試吧 不太明白你的意思
專業是指學生的班級嗎
上一篇:可傾瓦軸承檢查發現下瓦塊積碳