已知关系模式:S(Sno,Sname,Sclass),C(Cno,Cname,Cteacher),SC(Sno,Cno,Scgrade)。其中,S为学生关系:Sno学号, Sname姓名,Sclass班级; C为课程关系:Cno课程号, Cname课程名, Cteacher任课教师;SC为学生选课关系:Scgrade成绩。你能书写出下列SQL语句吗?这些语句的书写是衡量你是否掌握数据库语言的标志。

(1)找出学过“李明”老师讲授课程的所有学生;

(2)找出学全了“李明”老师讲授课程的所有学生;

(3)找出没学过“李明”老师讲授课程的所有学生;

(4)找出没学全“李明”老师讲授课程的所有学生。

解:

(1)“学过”词语的含义表示只要为其中一种情况即可,所以,可以采用IN子查询,刚开始做的时候把它想为了EXIST,但其是它和IN不等价

代码如下:

 SELECT DISTINCT S.Sname FROM S

   WHERE SNO IN(SELECT SNO FROM SC,C
SC.Cno=C.Cno AND C.Cteacher='李明');

(2)“全”代表着所有,根据句意,可以等价为不存在有一门“李明”老师主讲的课程该学生没有学过

SELECT S.Sname FROM S
WHERE NOT EXISTS ---不存在
(SELECT * FROM C ----李明教授课程
WHERE C.Cteacher='李明' AND NOT EXISTS
(SELECT * FROM SC ---该同学没学过
WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno));

(3)“没学过”则正好与(1)相反,只要改为NOT IN即可

 SELECT Sname FROM S

   WHERE Sno NOT IN(SELECT Sno FROM SC,C 

                      WHERE C.Cteacher='李明' AND  S.Sno=SC.Sno AND SC.Cno=C.Cno);

(4)“没学全”在(2)的基础上加上了否定,则只要在其前面加上否定即可

SELECT DISTINCT S.Sname FROM S

   WHERE S.Sno NOT IN (SELECT SC.Sno FROM SC

                       WHERE NOT EXISTS (SELECT * FROM C

                                        WHERE C.Cteacher='李明' AND NOT EXISTS (SELECT * FROM SC  

                                                            WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno)))

EXIST子查询的更多相关文章

  1. sqlserver in 和 exist 子查询

    1 in 子查询 use StudentManageDB go --select StudentName from Students --where StudentId=(select Student ...

  2. mysql之连接查询、联合查询、子查询

    本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...

  3. 6-SQL子查询

    (1) 什么是关联子查询,什么是非关联子查询 (嵌套查询) 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做非关联子查询. 如 ...

  4. 在SQL Server中为什么不建议使用Not In子查询

        在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下       下面 ...

  5. mysql连接查询和子查询

    一.连接查询 1.交叉连接 就是从一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录,其中包括两个表的所有的字段! 从结果上看,就是对两张表做笛卡尔积! 笛卡尔积也就是两个表中所有可能的连 ...

  6. 【T-SQL基础】03.子查询

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  7. 浅谈T-SQL中的子查询

    引言 这篇文章我们来简单的谈一下子查询的相关知识.子查询可以分为独立子查询和相关子查询.独立子查询不依赖于它所属的外部查询,而相关子查询则依赖于它所属的外部查询.子查询返回的值可以是标量(单值).多值 ...

  8. 在 SQL Server 数据库的 WHERE 语句中使用子查询

    这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...

  9. MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

随机推荐

  1. 虚拟机centos7系统下安装hadoop ha和yarn ha(详细)

    一:基础环境准备 (一):虚拟机新建五个centos7系统(复制文件夹的方式) (二):角色分配 (三)按照角色分配表配置 (1)更改主机ip(自行查找),如果只是个人搭建玩一玩,可选择安装cento ...

  2. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  3. JavaScript之12306自动刷新车票[待完善]

    function refresh(){ var search_btn = document.getElementById("query_ticket"); var result_t ...

  4. luogu P2331 [SCOI2005]最大子矩阵

    传送门 \[\huge\mathit{warning}\] \[\small\text{以下说明文字高能,请心脏病,,,,,,人士谨慎观看,请未成年人在家长陪同下观看}\] 皮这一下很开心 其实是代码 ...

  5. 第16月第9天 opengl glCltDispatchTable

    1.glCltDispatchTable typedef struct _GLTEBINFO { // glCltDispatchTable must be the first field for t ...

  6. mysql 语句 GROUP_CONCAT

    select * from blog_log;+----+---------------------+-------+--------+| id | time | level | info |+--- ...

  7. delphi-TTcpServer与TTcpClient

    最简单的TTcpServer与TTcpClient通信实例-Delphi_海盗船长_新浪博客http://blog.sina.com.cn/s/blog_5383794d0100nt9u.html d ...

  8. Java ArrayList类

    ArrayList对象可以用于存储一个对象列表 例子: ArrayList<String> list = new ArrayList<String>() 例子: public ...

  9. android handlerThread

    一.handlerThread产生的背景

  10. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...