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    )                        

          )

 

posted @ 2018-01-10 17:09  kakck  阅读(174)  评论(0编辑  收藏  举报