名單就是姓名。
學生名單就是學生姓名。
還是先在熟悉的 學生-學習-課程表進行查詢討論訓練,2333!
學生(學號,姓名,性別,年齡,籍貫,出生年月,學院)
課程(課程號,課程名,學時,開課學期,先行課,學分,課程性質)
學習(學號,課程號,成績)
1.查詢至少選修課程名為'數據庫原理'和'操作系統'課程的學生姓名。
很明顯,這是一個集合包含性問題,可以用除法哦2333
當然擴展一下啦:交運算是可以表達部分"除法"運算實現的功能滴

當然,也可以用自連接,但是有些連接要多的一些,后續再寫2333。
2.查詢被所有同學選修的課程的課程號?查詢選修所有課程的學生的學號?
進違啦,繼續的除法運算!

3.找出計算機學院1980年以后出生的女同學的名單。
分析:找出計算機學院(學院)1980年以后出生(出生年月)的女(性別)同學的名單(姓名)。
4.求選修1號課程的學生姓名和所在學院。
分析:求選修1號課程(學習表-,)的學生姓名和所在學院(學生表-)。將兩表做自然連接投影相應的屬性之。
5.求選修數據庫原理的學生姓名。
分析:需要三個表做自然連接哦2333.

6.查詢同時選修數據庫原理以及操作系統的學生名單?
查詢至少選修了數據庫原理和操作系統的學生名單?
查詢至少同時選修了數據庫原理以及操作系統的學生名單?
求至少選修了數據庫原理和操作系統的學生名單?
分析:繼續:除法運算。
名單就是姓名。
7.查詢沒有被任何人選修的課程名?
分析:差運算
8.查詢沒有選修任何課程的學生學號和姓名?
分析:仍然的差運算
漢語中的"沒有","是...但不包含"通常意義上是差運算的要求。

9.查詢至少選修1號同學選修的所有課程的學生姓名?
分析:查詢至少選修1號同學選修的所有課程的學生的姓名。所有二字,一語揭示了全部所有包含性的問題這是,該用除法哦!
像另一個值得注意的查詢語句"查詢選修1號同學選修的課程的學生姓名。"這里面的意思和本題的查詢意思就截然不同了嚶嚶。
全體性問題
10.查詢選修1號同學選修的課程的學生姓名?
查詢選修1號同學選修的一門或多門課程的學生姓名?
分析:這里要用自連接。
可能是選擇了其中一門,這里是只要有只要存在就行了!
學習(學號,課程號,成績)
學習*學習=(1,2,3,4,5,6)=(學號,課程號,成績,學號,課程號,成績)
存在性問題2333
11.查詢至少選修了課程號為1和課程號為2的學生的學號?
分析:自連接可,除法也可。


忍不住寫了一些代碼,嘻嘻:
use try; /*查詢至少選修了1號同學選修的所有課程的學生姓名*/ select sname from student where not exists (select * from sc as a where sno='1' and not exists (select * from sc as b where sno=student.sno and cno=a.cno)); /*查詢選修1號同學選修的課程的學生姓名*/ select sname from student where sno in (select a.sno from sc as a,sc as b where b.sno='1' and a.cno=b.cno);
12.求至少選修了兩門課程的學生學號。
分析:解決這個問題:
關系代數-------->自連接
SQL語言--------->集函數(統計函數count)尤其為佳,嘿嘿

/*求至少選修了兩門課程的學生學號*/ select sno from student where sno in (select sno from sc group by sno having count(*)>=2);
13.一些其他的參考嚶嚶:



來自一位17級學長的簡書blog。
14.接下來了解一下關系代數表達式的優化算法---語法樹。
語法樹是二叉樹,千萬不要整出三叉樹這樣的幺蛾子事件哦2333!哈哈哈!
