`
blues1021
  • 浏览: 135675 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

EXISTS、使用操作符的相关子查询小结

阅读更多

一、判断使用相关子查询前提特征: 前提是在子查询中引用了外部查询中的一列或多列, 在编写受控于外部查询的某个列值(一般是外键)的子查询时。特征是相关子查询的效率是较低的,所以要谨慎使用。类型分为使用操作符的、使用EXISTS的相关子查询。

二、相关子查询的执行步骤:

步骤是:

(1)进入外部查询的一行。

(2)在读取外部一行下,子查询for一遍内部的整个表得到所给条件的返回值。

(3)外部查询的一行与子查询返回值比较确定外部查询的返回值,返回(1)(2)直至得到整个查询结果。

三、使用操作符的相关子查询:

示例:

SELECTstuff_id,stuff_name FROM stuff outter WHERE outter.Salary >

(SELECT AVG(Salary) FROM stuff inner

WHERE outter.Apartment=inner.Apartment)

ORDER BY Apartment;

上述是在职员表中选出大于职员所在部门的平均工资的职员编号和姓名。

1.使用操作符的特点:可以实现内部表,按外部控制,对内部表进行分组;然后在分组上返回组上某字段的计算值给外部表,外部表做出判断并返回符合条件行的值。

2.编写使用操作符的子查询:上面示例的聚集函数为其它的聚集函数,操作符可以是> ,< ,=,<>等。

四:EXISTS相关子查询:

示例:

SELECT student_id,student_name FROM  student s

WHERE NOT EXISTS

          (SELECT * FROM sc sc1

           WHERE sc1.student_id='0807100404' AND

                    NOT EXISTS

                            (SELECT *

                             FROM sc sc2

                             WHERE sc2.student_id=s.student_id AND sc2.course_id=sc1.course_id

                               )

                     );

目的:查询至少选修了学号为0807100404的学生,选修的全部课程,的学生的学号和姓名。

解释下,至少就是等于或包含至少后面得内容的集合。

如果要用自然语言解释就是:先对外部的一个学生选择了和sc1一样的课程查询出来,然后取反得到只有sc1选择了的课程记录,再取反得到外部的一个学生是选择了sc1选择的全部课程或更多。

可能你看上面的自然语言解释有些不明白,下面简要总结下EXISTS实质。

1.使用EXISTS的特点: 当仅用EXISTS时,可以用自然连接来代替,但是描述自身的分组后选择 时要用EXISTS,且描述"所有未“,”至少“这些取反的NOT EXISTS时 就难以用自然连接来解决,此时只好用NOT EXISTS。

2.EXISTS,NOT EXISTS的执行实质 :实质是返回true,false。但是当外部一行,内部一for遍历,再一for遍历时,从返回的结果分析更清楚这样的过程;实质上此时返回的结果是在给定条件下的记录集合,取NOT EXISTS就是不符合条件的记录集合 ,再在上面对应的列值中进行选择。最后返回给最外层一个true,false进行choose or not

3.编写使用EXISTS、NOT EXISTS的子查询 :先分析需求是否符合相关子查询的前提;确定关联的表和外键;用集合和EXIST、NOT EXISTS的实质来大概画出逻辑嵌套层次;编写代码。

 

 

 

 

0
1
分享到:
评论

相关推荐

    Oracle数据库-- 高级子查询chinese

    通过本章学习,您将可以: 书写多列子查询 子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除...使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句

    数据库实验报告 SQL查询 ,子查询组合

    (2)使用In、比较符和Exists操作符进行嵌套查询操作。 (3)分组查询,包括分组条件表达、选择组条件表达的方法。 (4)集合查询。 (5)使用视图创建语句建视图,通过视图查询数据 (6)带子查询的修改和删除 ...

    常用SQL命令语句讲解视频.zip

    网盘文件永久链接 ...│ 8.exists操作符_操作.mp4 │ 9.相关更新删除.mp4 │ 9相关更新删除.mp4 │ 10.相关更新删除_操作.mp4 │ 10相关更新删除.mp4 │ 11.with子句.mp4 │ 12.with子句_操作.mp4 └ with子句.mp4

    MySQL中exists关键字和in的区别有那些? SQL语句优化有那些方法? 查询速度很慢应该怎么办?

     exists使用循环的方式,由outer表的记录数决定循环的次数,对于exists的影响最大,所以,外表的记录越小,子查询结果集较大时适用于exists; in 先执行子查询,子查询的结果返回去重之后,再执行主查询,所以,子...

    精通SQL 结构化查询语言详解

    10.3.3 在HAVING子句中使用相关子查询  10.4 嵌套子查询  10.5 使用子查询创建视图  10.6 树查询 第11章 数据插入操作  11.1 插入单行记录  11.1.1 基本语法  11.1.2 整行插入  11.1.3 NULL值的...

    精通sql结构化查询语句

    10.3.2 使用EXISTS子查询实现两表交集 10.3.3 使用EXISTS子查询实现两表并集 10.3.4 使用NOT EXISTS的子查询 10.4 相关子查询 10.4.1 使用IN引入相关子查询 10.4.2 使用比较运算符引入相关子查询 10.4.3 在HAVING...

    【一文看懂SQL系列】攻下 查询 最难知识点之 子查询

    EXISTS后面(相关子查询)表子查询 按结果集的行列数不同: 标量子查询(结果集只有一行一列) 行子查询(结果集只有一行多列) 列子查询(结果集只有一列多行) 表子查询(结果集为多行多列) 一、WHERE 或 HAVING ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) ...

    3、查询与增删改操作

    / 最小值MIN()3、连接查询(1)内连接查询(2)外连接查询(3)复合条件连接查询4、子查询(1)带ANY/SOME和ALL关键字的子查询(2)带EXISTS/NOT EXISTS关键字的子查询(3)使用操作符的子查询5

    精通SQL--结构化查询语言详解

    10.3.3 在having子句中使用相关子查询 201 10.4 嵌套子查询 203 10.5 使用子查询创建视图 204 10.6 树查询 205 第11章 数据插入操作 209 11.1 插入单行记录 209 11.1.1 基本语法 209 11.1.2 整行插入 209 ...

    Oracle数据库SQL语句优化策略

    基本的Sql编写注意事项 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替 用IN写出来的SQL的优点是比较容易写及清晰易懂,但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的...

    SQL入门常见问题总结与实用技巧介绍.docx

    尽量避免不必要的子查询,采用连接JOIN操作提高效率。 注释习惯: 对复杂查询添加注释说明逻辑,便于后期维护和他人理解。 使用标准SQL注释符,如-- 单行注释 或 /* 多行注释 */。 查询性能优化 索引策略: 根据...

    C#开发经验技巧宝典

    0848 如何在查询中正确使用逻辑操作符 507 0849 利用通配符进行查询 507 19.3 SQL关键字查询 508 0850 如何使用ESCAPE关键字规定转义字符 508 0851 如何使用BETWEEN进行范围查询 508 0852 如何使用NOT ...

    PHP和MySQL Web开发第4版pdf以及源码

    10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用PHP从Web访问MySQL数据库 11.1 Web...

    PHP和MySQL WEB开发(第4版)

    10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用PHP从Web访问MySQL数据库 11.1 Web数据库架构的...

    PHP和MySQL Web开发第4版

    10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用PHP从Web访问MySQL数据库 11.1 Web...

Global site tag (gtag.js) - Google Analytics