暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL练习题(5)

小辉数据分析 2021-05-07
277

我们仍然使用那四张表来做题。四个题目安排如下:

  • 查询「李」姓老师的数量

  • 查询学过「张三」老师授课的同学的信息

  • 查询没有学全所有课程的同学的信息

  • 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息

我们来解答这些习题:

第一题:

    select '李姓老师',count(tid) as num
    from Teacher
    where tname like '李%';

    第一题非常简单:只需要使用通配符就可以了(%表示匹配多个字符,_表示匹配一个字符)

    结果如下:

    第二题:

      select S.sid,S.sname,S.ssex,S.sage
      from Student S
      inner join SC using(sid)
      inner join Course Ce using(cid)
      inner join Teacher Te using(tid)
      where Te.tname='张三';

      结果如下:

      我们还可以通过视图的方式来简化查询:

        -- 建立视图
        create view view2 as
        select * from Course Ce inner join Teacher Te using(tid);
        -- 查询
        select S.sid,S.sname,S.ssex,S.sage
        from Student S
        inner join SC using(sid)
        inner join view2 using(cid)
        where view2.tname='张三';

        第三题:

          select sid,sname,ssex,sage from
          (select S.sid,S.Sname,S.ssex,S.sage,Count(SC.cid) as num
          from Student S left join SC using(sid)
          group by S.sid,S.sname,S.sage,S.ssex
          order by sid)as aa
          where num<(select count(cid) from Course);

          结果如下:


          我们还可以有第二种写法:

            -- 建立一个视图
            create view view3 as
            select sid,count(cid) as num from SC group by sid having count(cid)<(select count(cid) from Course);
            -- 查询结果
            select * from Student where sid not in (select sid from SC)
            union
            select * from Student where sid in (select sid from view3)
            order by sid;

            第四题:

              select distinct sid,sname,ssex,sage from Student
              inner join SC using(sid)
              where cid in (select cid from SC where sid='01')
              and sid !='01'
              order by sid;

              结果如下:

              在有些数据库中,我们还可以采用如下的写法:

                select distinct sid,sname,ssex,sage from Student
                inner join SC using(sid)
                where cid in (select cid from SC where sid='01')
                except select sid,sname,ssex,sage from Student inner join SC using(sid) where sid='01'
                order by sid;


                文章转载自小辉数据分析,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论