先定義四個表:學習
教師關係: T (T#,TNAME,TITLE)spa
課程關係:C (C#,CNAME,T#)orm
學生關係:S (S#,SNAME,AGE,SEX)it
選課關係:SC (S#,C#,SCORE)select
一、檢索至少選修課程號爲C2和C4的學生學號
select X.S#
from SC AS X,SC AS Y
WHERE X.S#=Y.S# AND X.C# ='C2' AND Y.C#='C4';
AS 能夠省略 能夠寫成 SC X,SC Y
二、檢索學習所有課程的學生姓名
思路: 在表S中找學生,要求這個學生學了所有的課程。換而言之,在表S 中找學生,在C中不存在一門課,這學生沒有學。
SELECT SNAME
FROM S
WHERE NOT EXISTE /* C表中不存在一門課*/
( SELECT *
FROM C
WHERE NOT EXISTS /*該學生沒有學*/
(SELECT *
FROM SC
WHERE SC.S#=S.S# AND SC.C#=C.C#));
三、檢索所學課程包含學生S3所學課程的學生學號。
思路:在SC表中找一個學生(S#), /* 在SC表中找*/
對與S3學的每一門課(C#), /* 在SC表中找*/
該學生都學了。 /* 在SC表中存在一個元組*/
而後,改爲雙重否認形式:
在SC表中找一個學生(S#),
不存在S3學的一門課(C#),
該學生沒有學了。
SELECT DISTINCT S#
FROM SC AS X
WHERE NOT EXISTS /*不存在是S3學的一門課*/
(SELECT *
FROM SC AS Y
WHERE Y.S#='S3' AND NOT EXISTS /*該學生沒有學*/
(SELECT *
FROM SC AS Z
WHERE Z.S#=X.S# AND Z.C#=Y.C#
))