• 数据库——SQL-SERVER练习(2)连接与子查询


    一.实验准备

    1.复制实验要求文件及“CREATE-TABLES.SQL”文件, 粘贴到本地机桌面。

    2.启动SQL-SERVER服务。

    3. 运行查询分析器, 点击菜单《文件》/《打开》, 打开CREATE-TABLES.SQL, 并运行, 建立学生数据库STUDB及表STUDENT, COURSE, SC。

    4. 点击菜单《文件》/《新建》, 建立一个空查询窗口。开始实验。

    5.本次实验环境是xp虚拟机,SQL-SERVER迷你版。

    CREATE-TABLES.SQL”文件 https://www.cnblogs.com/wkfvawl/p/10843788.html

    二.实验内容

    1查询每门课的课号和先行课的先行课号(自我连接)

    SELECT FIRST.CNO,SECOND.CPNO
    FROM COURSE FIRST,COURSE SECOND
    WHERE FIRST.CPNO=SECOND.CNO

    2 查询每门课的课号,课名,先行课号,先行课名(自我连接)

    SELECT FIRST.CNO,FIRST.CNAME,SECOND.CPNO,SECOND.CNAME CPNAME
    FROM COURSE FIRST,COURSE SECOND
    WHERE FIRST.CPNO*=SECOND.CNO

    3 查询年龄比CS系平均年龄大的学生名(>子查询)

    SELECT SNAME
    FROM STUDENT
    WHERE SAGE >
    (
          SELECT AVG(SAGE)
          FROM STUDENT
          WHERE SDEPT='CS'
    )

    4 查询选修学生人数>=2的课程名 (IN子查询)

    SELECT CNAME
    FROM COURSE
    WHERE CNO IN
    (
          SELECT COUNT(*)
          FROM SC
          GROUP BY CNO
          HAVING COUNT(*)>=2
    )

    5   查询所有选修了1号课程的学生姓名(用EXISTS子查询)

    SELECT SNAME
    FROM STUDENT
    WHERE EXISTS
    (
          SELECT *
          FROM SC
          WHERE SNO=STUDENT.SNO AND CNO='1'
    )

    6  查询所有选修了1号课程的学生姓名(IN 子查询)

    SELECT SNAME
    FROM STUDENT
    WHERE SNO IN
    (
          SELECT SNO
          FROM SC
          WHERE CNO='1'
    )

    7  查询所有选修了1号课程的学生姓名(用连接)

    SELECT SNAME
    FROM STUDENT,SC
    WHERE  SC.SNO=STUDENT.SNO AND CNO='1'

    8. 查询未选1号课的学生号,学生名(用NOT EXISTS子查询)

    SELECT SNO,SNAME
    FROM STUDENT
    WHERE NOT EXISTS
    (
          SELECT *
          FROM SC
          WHERE SNO=STUDENT.SNO AND CNO='1'
    )

    9  选修了所有课的学生名
      (查询学生名, 条件是不存在这样的课, 该生不选) :

    SELECT SNAME
    FROM STUDENT
    WHERE NOT EXISTS
    (
       SELECT *
       FROM COURSE
       WHERE NOT EXISTS
            (
              SELECT *
              FROM SC
              WHERE SNO=STUDENT.SNO
                AND CNO=COURSE.CNO
             )
    )

    10 . 被所有学生选修的课名
      (查询课程名, 条件是不存在这样的学生, 不选该课)

     换个说法,不存在这样的学生, 该课不选?

    SELECT CNAME
    FROM COURSE
    WHERE NOT EXISTS
    (
       SELECT *
       FROM STUDENT
       WHERE NOT EXISTS
            (
              SELECT *
              FROM SC
              WHERE SNO=STUDENT.SNO
                    AND CNO=COURSE.CNO
             )
    )

    11.选修了95002选修所有课的学生名
    查询语义: 查询学生名, 条件是对于95002选了的课中不存在这样的课,该生不选

    不存在这样的课, 95002选并且该生不选.

    SELECT SNAME
    FROM STUDENT
    WHERE NOT EXISTS
    (
       SELECT *
       FROM COURSE
       WHERE EXISTS
       (
          SELECT *
          FROM SC
          WHERE SNO='95002' AND CNO=COURSE.CNO
        )
        AND
        NOT EXISTS
        (
          SELECT *
          FROM SC
          WHERE SNO=STUDENT.SNO AND CNO=COURSE.CNO
        )
    )

  • 相关阅读:
    MongoDB 备份与恢复
    MongoDB 分片
    MongoDB 复制(副本集)
    MongoDB 聚合
    利用SSL For Free工具3分钟获取Let's Encrypt免费SSL证书
    使用免费SSL证书让网站支持HTTPS访问
    免费资源部落 免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置SSL
    Windows上管理远程Linux VPS/服务器文件工具
    SSH远程会话管理工具
    腾讯云linux服务器安装lnmp一键包
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/10837932.html
Copyright © 2020-2023  润新知