• 数据库sql查询习题


    设教学数据库Education有三个关系:

    学生关系S(SNO,SNAME,AGE,SEX,SDEPT);//学号,姓名,年龄,性别,学生系别

    学习关系SC(SNO,CNO,GRADE);//学号,课程号,成绩

    课程关系C(CNO,CNAME,CDEPT,TNAME);//课程号,课程名,课程系别,教师名

    查询问题:

    1、查所有年龄在20岁以下的学生姓名及年龄。

    SELECT SNAME,AGE FROM S WHERE AGE<20

    2、查考试成绩有不及格的学生的学号。

    SELECT DISTINCT SNO FROM SC WHERE GRADE<60

    3、查所年龄在20至23岁之间的学生姓名、系别及年龄。

    SELECT SNAME,SDEPT,AGE FROM S WHERE AGE BETWEEN 20 AND 23

    4、查计算机系、数学系、信息系的学生姓名、性别。

    SELECT SNAME,SEX FROM S WHERE SDEPT IN ('CS','MA','IS')

    5、查既不是计算机系、数学系、又不是信息系的学生姓名、性别。

    SELECT SNAME,SEX FROM S WHERE SDEPT NOT IN ('CS','MA','IS')

    6、查所有姓“刘”的学生的姓名、学号和性别。

    SELECT SNAME,SNO,SEX
    FROM S
    WHERE SNAME LIKE '刘%'

    7、查姓“上官”且全名为3个汉字的学生姓名。

    SELECT SNAME
    FROM S
    WHERE SNAME LIKE '上官_'

    8、查所有不姓“张”的学生的姓名。

    SELECT SNAME
    FROM S
    WHERE SNAME NOT LIKE '张%'

    9、查DB_Design课程的课程号。

    SELECT CNO
    FROM C
    WHERE CNAME = 'DB_Design'

    10、查缺考(即GRADE没有赋值)的学生的学号和课程号。

    SELECT SNO,CNO
    FROM SC
    WHERE GRADE IS NULL

    11、查年龄为空值的学生的学号和姓名。

    SELECT SNO,SNAME
    FROM S
    WHERE AGE IS NULL

    12、查计算机系20岁以下的学生的学号和姓名。

    SELECT SNO,SNAME
    FROM S
    WHERE SDEPT = 'CS' AND AGE<20

    13、查计算机系、数学系、信息系的学生姓名、性别。

    SELECT SNAME,SEX
    FROM S
    WHERE SDEPT IN ('CS','MA','IS')

    14、查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。

    SELECT SNO,GRADE
    FROM SC
    WHERE CNO = 'C3'
    ORDER BY GRADE DESC

    15、查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。

    SELECT *
    FROM S
    ORDER BY SDEPT ASC,AGE DESC

    16、查询学生总人数。

    SELECT COUNT(*)
    FROM S

    17、查询选修了课程的学生人数。

    SELECT COUNT(DISTINCT SNO)
    FROM SC

    18、计算选修了C1课程的学生平均成绩。

    SELECT AVG(GRADE)
    FROM SC
    WHERE CNO = 'C1'

    19、查询学习C3课程的学生最高分数。

    SELECT MAX(GRADE)
    FROM SC
    WHERE CNO = 'C3'

    20、查询各个课程号与相应的选课人数。

    SELECT CNO,COUNT(SNO)
    FROM SC
    GROUP BY CNO

    21、查询计算机系选修了3门以上课程的学生的学号。

    SELECT SNO
    FROM S,SC
    WHERE SDEPT = 'CS' AND S.SNO = SC.SNO
    GROUP BY SNO
    HAVING COUNT(*)>3

    22、求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。

    SELECT AGE,COUNT(SNO)
    FROM S
    GROUP BY AGE
    HAVING COUNT(*)>50
    ORDER BY COUNT(*) ASC,AGE DESC

    23、查询每个学生及其选修课程的情况。

    SELECT S.SNO,SNAME,AGE,SEX,SDEPT,CNO,GRADE
    FROM S,SC
    WHERE S.SNO = SC.SNO

    24、查询选修了C2课程且成绩在90分以上的所有学生。

    SELECT SNO
    FROM SC
    WHERE CNO = 'C2' AND GRADE >90

    25、查询每个学生选修的课程名及其成绩。

    SELECT CNAME,GRADE
    FROM SC
    GROUP BY SNO

    26、统计每一年龄选修课程的学生人数。

    SELECT AGE,COUNT(DISTINCT S.SNO)
    FROM S,SC
    WHERE S.SNO = SC.SNO
    GROUP BY AGE

    27、查询选修了C2课程的学生姓名。

    连接查询

    SELECT SNAME
    FROM S,SC
    WHERE CNO = 'C2' AND S.SNO = SC.SNO

    嵌套查询

    SELECT SNAME
    FROM S
    WHERE SNO IN
        (SELECT SNO
         FROM SC
         WHERE CNO = 'C2')

    28、查询与“张三”在同一个系学习的学生学号、姓名和系别。

    嵌套查询

    SELECT SNO,SNAME,SDEPT
    FROM S
    WHERE SDEPT IN
        (SELECT SDEPT
         FROM S
         WHERE SNAME = '张三')

    自身连接

    SELECT SNO,SNAME,SDEPT
    FROM S S1, S S2
    WHERE S1.SDEPT = S2.SDEPT AND S2.SNAME = '张三'

    29、查询选修课程名为“数据库”的学生学号和姓名。

    连接查询

    SELECT SNO,SNAME
    FROM S,SC,C
    WHERE CNO = '数据库' AND S.SNO = SC.SNO AND C.CNO = SC.CNO

    嵌套查询

    SELECT SNO,SNAME
    FROM S
    WHERE SNO IN
        (SELECT SNO
         FROM SC
         WHERE CNO IN
             (SELECT SNO
              FROM C
              WHERE CNAME = '数据库'))
    dayehui
  • 相关阅读:
    Solr简介
    儿童节快乐
    添加新的内容分类
    weka
    Junit测试样例
    Linux MySQL单实例源码编译安装5.5.32
    perconatoolkit 工具集安装
    Linux MySQL单实例源码编译安装5.6
    MySQL 开机自启动
    mysql5.6之前需要账号的安全加固
  • 原文地址:https://www.cnblogs.com/zrh-960906/p/14440323.html
Copyright © 2020-2023  润新知