美文网首页
SQL进阶练习题26-30

SQL进阶练习题26-30

作者: awsome365 | 来源:发表于2019-02-25 23:25 被阅读2次

    SQL进阶练习题26-30

    大背景和建表、插入语句就不啰嗦了,参考第一篇

    四张表概要:

    1. 学生表
      student(sid,sname,sage,ssex) --sid 学生编号,sname 学生姓名,sage 出生年月,ssex 学生性别
    2. 课程表
      course(cid,cname,tid) --cid 课程编号,cname 课程名称,tid 教师编号
    3. 教师表
      teacher(tid,tname) --tid 教师编号,tname 教师姓名
    4. 成绩表
      sc(sid,cid,score) --sid 学生编号,cid 课程编号,score 分数
      为了方便查看,我把四个表截了图:
      [图片上传失败...(image-7d7aff-1551108164260)]


      course
      teacher
      sc

    题目:

    1. 查询出只选修两门课程的学生学号和姓名
    2. 查询男生、女生人数
    3. 查询名字中含有「风」字的学生信息
    4. 查询同名同性学生名单,并统计同名人数
    5. 查询 1990 年出生的学生名单

    sql

    查询出只选修两门课程的学生学号和姓名

    select s.sid,s.sname from student s
    inner join (select sid,count(*) from sc group by sid having count(*)=2) a
    on s.sid=a.sid;
    

    查询男生、女生人数

    select 'man',count(*) from student where ssex='男'
    union
    select 'woman',count(*) from student where ssex='女';
    
    select ssex,count(*) from student group by ssex;
    --第二个方法更直接,我第一反应是第一种
    

    查询名字中含有「风」字的学生信息

    select * from student
    where sname like '%风%';
    

    查询同名同性学生名单,并统计同名人数

    select * from
    (select sname,ssex,count(*) c_num from student group by sname,ssex ) a
    where a.c_num<>1;
    
    select a.*,b.c_num from student a
    left join (select sname,ssex,count(*) c_num from student group by sname,ssex) b
    on a.sname=b.sname
    where b.c_num<>1;
    --第二个方法更切合题意
    

    查询 1990 年出生的学生名单

    select * from student
    where sage like '1990%';
    

    相关文章

      网友评论

          本文标题:SQL进阶练习题26-30

          本文链接:https://www.haomeiwen.com/subject/pjxoyqtx.html