• sql语句练习50题


    Student(Sid,Sname,Sage,Ssex) 学生表
    Course(Cid,Cname,Tid) 课程表
    SC(Sid,Cid,score) 成绩表
    Teacher(Tid,Tname) 教师表
    练习内容:
    1.查询“某1”课程比“某2”课程成绩高的所有学生的学号;
    SELECT a.Sid
    FROM SC AS a ,SC AS b
    Where a.Cid IN (SELECT Cid
    FROM Course
    Where Cname="某1")
    AND b.Cid IN (SELECT Cid
    FROM Course
    Where Cname="某2")
    AND a.score>b.score
    AND a.Sid=b.Sid

    2.查询平均成绩大于60分的同学的学号和平均成绩;
    SELECT Sid ,avg(score)
    FROM SC
    GROUP BY Sid
    HAVING avg(score)>60

    3.查询所有同学的学号、姓名、选课数、总成绩
    SELECT Sid,
    Sname,
    (SELECT count(*)
    FROM SC
    WHERE SC.Sid=Student.Sid),
    (SELECT count(score)
    FROM SC
    WHERE SC.Sid=Student.Sid),
    FROM Student;
    用联结表:
    SELECT Student.Sid,
    Student.Sname,
    count(SC.Cid)
    sum(SC.score)
    FROM Student LEFT OUTER JOIN SC
    ON Student.Sid=SC.Sid
    GROUP BY Student.Sid,Student.Sname;

    4.查询姓“李”的老师的个数;
    SELECT count(*)
    FROM Teacher
    WHERE Tname LIKE "李%";

    5.查询没学过“叶平”老师课的同学的学号、姓名;

    SELECT DISTINC Student.Sid, DISTINCT Student.Sname
    FROM Student,Course,SC,Teacher
    WHERE Student.Sid=SC.Sid
    AND SC.Cid=Course.Cid
    AND Course.Tid=Teacher.Tid
    AND Tname != "叶平";

    6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;
    使用子查询
    SELECT Sid,Sname
    FROM Student
    WHERE Sid IN (SELECT Sid
    FROM SC
    WHERE Cid="1")
    AND Sid IN (SELECT Sid
    FROM SC
    WHERE Cid="2");
    使用联结表
    SELECT Student.Sid,Student.Sname
    FROM Student,SC AS a,SC AS b
    WHERE a.Sid =Student.Sid
    AND b.Sid =Student.Sid
    AND a.Cid="1"
    AND b.Cid="2";

    7.查询学过“叶平”老师所教的所有课的同学的学号、姓名;
    SELECT Sid,Sname
    FROM Student
    WHERE Sid IN (SELECT Sid
    FROM SC,Course,Teacher
    WHERE SC.Cid=Course.Cid
    AND Course.Tid=Teacher.Tid
    AND Teacher.Tname="叶平"
    GROUP BY Sid
    HAVING count(Cid)=(SELECT count(Cid)
    FROM Course,Teacher
    WHERE Course,Tid=Teacher.Tid
    AND Teacher.Tname="叶平"));

    8.查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;
    SELECT a.Sid,a.Sname
    FROM (SELECT Student.Sid,Student.Sname,SC.score
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND SC.Cid=1)a,
    (SELECT Student.Sid,Student.Sname,SC.score
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND SC.Cid=2)b,
    WHERE a.score<b.score

    9.查询所有课程成绩小于60分的同学的学号、姓名;
    SELECT DISTINCT Sid,DISTINCT Sname
    FROM (SELECT Sid,Sname,count(Cid)
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND SC.score<60
    GROUP BY Sid,Sname
    HAVING count(Cid)=(SELECT count(Cid)
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    GROUP BY Sid,Sname))a;
    另一种解法:
    SELECT Sid,Sname
    FROM Student
    WHERE Sid NOT IN (SELECT Sid,Sname
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND SC.score>60);
    10.查询没有学全所有课的同学的学号、姓名;
    SELECT DISTINCT Sid,DISTINCT Sname
    FROM (SELECT Sid,Sname,count(Cid)
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    GROUP BY Sid,Sname
    HAVING count(Cid)<(SELECT count(Cid)
    FROM SC))a;
    11.查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名;
    SELECT DISTINCT Student.Sid,DISTINCT Student.Sname
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND Cid IN (SELECT Cid
    FROM SC
    WHERE Sid="1");

    12.查询至少学过学号为“1”同学所有一门课的其他同学学号和姓名;
    //

    13.把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
    UPDATE SC
    SET score=(SELECT AVG(SC.score)
    FROM SC,Course,Teacher
    WHERE SC.Cid=Course.Cid
    AND Course.Tid=Teacher.Tid
    AND Teacher.Tname="叶平");)
    WHERE Cid IN (SELECT SC.Cid
    FROM SC,Course,Teacher
    WHERE SC.Cid=Course.Cid
    AND Course.Tid=Teacher.Tid
    AND Teacher.Tname="叶平");

    14.查询和“1”号的同学学习的课程完全相同的其他同学学号和姓名;
    SELECT Sid,Sname
    FROM Student
    WHERE Sid NOT IN (SELECT DISTINCT Student.Sid
    FROM Student,SC
    WHERE Student.Sid=SC.Sid
    AND Cid NOT IN (SELECT Cid
    FROM SC
    WHERE Sid="1"));

    15.删除学习“叶平”老师课的SC表记录;
    DELETE FROM SC
    WHERE Cid IN (SELECT Cid
    FROM Course,Teacher
    WHERE Course.Tid=Teacher.Tid
    AND Teacher.Tname="叶平");

    16.向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“1”课程的同学学号、课程的平均成绩;
    INSERT INTO SC(Sid,
    Cid,
    score)
    SELECT Sid,Cid,score
    FROM SC
    WHERE Cid!="1";
    17.按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)
    SELECT Sid,
    (SELECT score
    FROM SC,Course
    WHERE SC.Sid=Student.Sid
    AND SC.Cid=Course.Cid
    AND Course.Cname="数据库") AS 数据库,
    (SELECT score
    FROM SC,Course
    WHERE SC.Sid=Student.Sid
    AND SC.Cid=Course.Cid
    AND Course.Cname="企业管理") AS 企业管理,
    (SELECT score
    FROM SC,Course
    WHERE SC.Sid=Student.Sid
    AND SC.Cid=Course.Cid
    AND Course.Cname="英语") AS 英语,
    (SELECT COUNT(Cid)
    FROM SC
    WHERE SC.Sid=Student.Sid) AS 有效课程,
    (SELECT AVG(score)
    FROM SC
    WHERE SC.Sid=Student.Sid) AS 平均成绩,
    FROM Student
    ORDER BY AVG(score) DESC;
    18.查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
    SELECT Cid AS 课程id,
    (SELECT MAX(score)
    FROM SC
    WHERE SC.Cid=Course.Cid) AS 最高分,
    (SELECT MIN(score)
    FROM SC
    WHERE SC.Cid=Course.Cid) AS 最低分,
    FROM Course;
    19.按各科平均成绩从低到高和及格率的百分数从高到低顺序

    26.查询每门课程被选修的学生数

    Select Cid, Cname,e

    From Course as c join (select Cid , count(Sid) as e

    from Course as a join SC as b

    Where a.Cid=b.Cid

    group by Cid) as d

    Where c.Cid=d.Cid

    27.查询出只选修了一门课程的全部学生的学号和姓名

    Select SC.Sid ,Sname

    from SC  join Student

    Where SC.Sid =Student.Sid

    Group by SC.Sid , Sname

    Having count(score)=1

    32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

    Select a.Cid , avg(score)

    From Course as a join SC as b

    Where a.Cid=b.Cid

    Group by Cid

    Order by avg(score) ASC , a.Cid DESC

    37.查询不及格的课程,并按课程号从大到小排列

    38.查询课程编号为且课程成绩在分以上的学生的学号和姓名;

    40.查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

    41.查询各个课程及相应的选修人数

    44.统计每门课程的学生选修人数(超过人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

    45.检索至少选修两门课程的学生学号

    rownum的用法
    查询所有成绩第二名到第四名的成绩

    47.查询没学过“叶平”老师讲授的任一门课程的学生姓名

    48.查询两门以上不及格课程的同学的学号及其平均成绩

    49.检索“”课程分数小于,按分数降序排列的同学学号

    50.删除“”同学的“”课程的成绩

  • 相关阅读:
    思维导图 第八章 项目质量管理
    思维导图 第七章 项目成本管理
    redis安装与配置
    思维导图 第六章 项目进度管理
    思维导图 第五章 项目范围管理
    Linux下用户-组权限配置
    意灵魔法馆首页的初步设计
    try catch自定义异常类的使用
    使用freemarker时,生成的html出现乱码
    乱码问题
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/5051125.html
Copyright © 2020-2023  润新知