zoukankan      html  css  js  c++  java
  • 数据库多表查询

    多表查询练习:  

    Student 学生信息表(Student(SID,Sname,Sage,Ssex)     -SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别)

    SC学生课程成绩表( SC(SID,CID,score)     --SID 学生编号,CID 课程编号,score 分数

    course课程信息表(Course(CID,Cname,TID)  --CID --课程编号,Cname 课程名称,TID 教师编号)  

    teacher表(Teacher(TID,Tname)   --TID 教师编号,Tname 教师姓名)

    查询语句练习:

    1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
     select a.*, b.score as ‘01课程分数’,  c.score as ‘02课程分数’       //as取别名
     from student a,SC b,SC c
     where a.SID = b.SID and a.SID = c.SID and b.CID = 1 and c.CID = 2 and b.score > c.score;

     取别名和as关键字:

    2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
    select a.SID , a.Sname ,avg(b.score) avg_score
    from Student a,SC b
    where a.SID = b.SID group by a.SID  having avg(b.score) >= 60;   //因为要根据每一个的成绩作平均值再排序,所以用到group by

    group by和having的用法

     3、查询在sc表中不存在成绩的学生信息。
    select * from Student where SID not in (select distinct SID from SC);

    distinct关键字:

     4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
    select a.SID, a.Sname,count(b.CID) as count, sum(b.score) as sum_score
    from Student a, SC b
    where a.SID = b.SID group by a.SID;

     5.查找有成绩但不是学生的学生学号、课程号、成绩

    select *from SC where SID not in(select distinct SID from student) 

     6.查询李姓老师的数量

    select count(TID) from Teacher where Tname like '李%';

    like关键字:

     mysql入门很简单中对count和sum的描述(疑惑点?): count()记录条数;sum对某个字段进行求和

     7、查询学过"张"老师授课的同学的信息

    select * from student

    where SID in(select distinct SID from SC  where CID in(select distinct CID from Course where TID in(select TID from Teacher  where Tname like 'zhang')));

    //通过Tname在teacher表里查老师的TID,通过TID在SC表里查SID,通过SID在student表里查Sname.

     8、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

    select Student.*
    from Student , SC
    where Student.SID = SC.SID and SC.CID = '02' and exists (Select 1 from SC  SC_2  where SC_2.SID = SC.SID  and SC_2.CID = '01') order by Student.SID

     

     exists关键字的用法:

     

    order by对查询结果进行排序的关键字:

    9、查询两门及其以上课程大于70分的同学的学号,姓名及其平均成绩

    select s.SID , s.sname , avg(score) as  avg_score

     from student s , sc
    where s.SID = SC.SID and s.SID in (select SID from SC where score>70 group by SID having count(1) >= 2) group by s.SID , s.sname

    //学号在选课表SC里面,以学号为组的成绩大于70并且数量大于两门的学生学号;再以学号和学生姓名为一组,找出学生姓名和学号

    查找课程号为2的低于平均分的同学的课程分和学学号及姓名(下面的查询语句对,上面的错误太多,分析了一下错因)(子连接)

     

     含有in的子连接:

     10.查找w同学的选课课程名称以及对应的成绩(隐式内连接)

    -- 查找w同学的课程名以及对应的成绩
    SELECT student.Sname, course.`Cname`,sc.`score`FROM sc,student,course WHERE sc.`CID`=course.`CID` AND student.`Sname`="w" AND student.`Sid`=sc.`SID`;

     11.显示内连接  (inner)  join on +条件

  • 相关阅读:
    Codeforces Round #551 (Div. 2) 题解
    【BZOJ5496】[十二省联考2019]字符串问题(后缀树)
    省选题记录
    【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
    Codeforces Global Round 2
    Android Studio安装使用图文教程(转)
    JAVA基础学习day15--集合二 TreeSet和泛型
    AndroidDevTools下载地址
    JAVA基础学习day14--集合一
    JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/11940993.html
Copyright © 2011-2022 走看看