sql语句
1、查找只有一个水手预定的船(查找只有一个学生选修的课程)(Reserves表中字段为sid,bid,date)
SELECT bid
FROM Reserves R1
WHERE bid NOT IN (SELECT bid
FROM Reserves R2
WHERE R1.sid != R2.sid )
基本逻辑是,从Reserves表中进行查找,看看R1表中船的编号在不在其他水手定的船的标号里面。即,R1中水手定的船的编号不在R2的编号中,选择R2表中的船的编号是R1水手没有定的再排除(NOT IN 逻辑关系)。
2、查找没有预定过船的水手
SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS ( /*预定过船的水手*/
SELECT B.bid
FROM Boats --找出所有船除了S中已经预定过的船
EXCEPT( SELECT R.bid
FROM Reserves R
WHERE R.sid = S.sid)
)
)
3、找出预订了所有船的水手
SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS (SELECT B.bid
FROM Boats B
WHERE NOT EXISTS( SELECT R.bid
FROM Reserves R
WHERE R.bid = B.bid
AND R.sid = S.sid )
)