目录
一、EXISTS子查询
二、NOT EXISTS子查询
三、子查询注意事项
四、IN/NOT IN子查询
五、本章总结
一、EXISTS子查询
1.使用EXISTS语句判断该数据库对象是否存在:
DROp TABLE IF EXISTS temp;
2. EXISTS作为WHERe语句的子查询:
SELECT .....FROM 表名 WHERe EXISTS(子查询);
3. EXISTS关键字后面的参数是一个任意的子查询,如果该子查询有返回行。则EXISTS子查询的结果为true,此时再执行外层查询语句。如果子查询有没返回行。则EXISTS子查询的结果为false,此时不再执行外层查询语句。
二、NOT EXISTS子查询
EXISTS和IN一样,同样允许添加NOT关键字实现取返操作,NOT EXISTS表示不存在。
三、子查询注意事项
(1)子查询可以嵌套在SQL语句中任何表达式出现的位置
在SELECtE语句中,子查询可以被嵌套在SELECT语句的列、表和查询条件中,即SELECT子句、FROM子句、WHERe子句、GROUP BY子句和HAVINg子句。
(2)只出现在子查询中而没有出现在父查询中的的表不能包含在输出列中
多层嵌套子查询的最终数据集只包含父查询的SELECT子句中出现的字段,而子查询的输出结果通常会作为其外层子查询数据源或用于数据判断匹配
四、IN/NOT IN子查询
五、本章总结
- 在开发过程中,若判断结果集可能为多条数据,则使用IN子查询能够避免语句执行错误。
- EXISTS和NOTEXISTS子查询的结果只取决于查询有无结果而其具体的内容无关。
- 除SELECT的WHERe子句中可以嵌套子查询外,子查询还可以嵌套于SELECT语句的列丶表和查询条件中,即SELECT子句丶GROUP BY子句和HAVINg子句。
- ORDER BY子句中不能嵌套子查询。
- 只出现在子查询中但是没有出现在父查询中的表不能包含在输出列中。
练习小作业:
- 使用IN关键字的子查询来查询能够开具"血常规"检查的科室名称。
- 使用NOT IN关键字的子查询来查询不能够开具"血常规"检查的科室名称。
- 统计病人最近一次来医院的日期和当天的总花费。
- 为年级表丶科目表丶学员表成绩表添加数据,要求使用一个insert语句。
- 查询2019年2月17日考试前5名的学员和分数。
- 将所有女学员按年龄从大到小排序,从第2条记录开始显示6名女学员的姓名丶年龄丶出生日期丶手机号码信息。
- 查询参加2019年2月17日考试的所有学员的最高分丶最低分丶平均分。
- 查询参加最近一次Logic Java考试成绩的学员的最高分和最低分。
- 使用NOT IN关键字的子查询来查询未参加HTML课程最近一次考试的在读学员名单。



