什么是SQL 语句中相关子查询与非相关子查询

这篇具有很好参考价值的文章主要介绍了什么是SQL 语句中相关子查询与非相关子查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是SQL子查询

要理解相关子查询和非相关子查询,我们得首先理解什么是子查询,子查询是指在一个查询语句中嵌套的另一个查询语句。 子查询可以嵌套在其他查询语句中,如 SELECTINSERTUPDATEDELETE 等,它作为一个独立的查询单元,其结果可以被外部查询所使用。 子查询可以帮助我们更灵活地处理数据和执行复杂的查询操作。

2.sql子查询分类

子查询主要有以下几类:

  1. 标量子查询:子查询返回的是单个值,如一个数字、字符串等。
  2. 行子查询:子查询返回的是一行数据。
  3. 列子查询:子查询返回的是一列数据。
  4. 表子查询:子查询返回的是一个表的结果。

3.子查询执行过程解析

子查询的执行过程遵循“由里及外”的原则,总是先执行最内层的子查询语句,执行完毕后将执行结果与外层的语句进行合并,依次逐层向外扩展并最终形成完整的 SQL 语句。

具体来说,子查询的执行过程可以分为以下几种情况:

  1. 子查询作为 WHERE 子句的一部分:首先执行子查询,得到结果集。然后,将结果集与外层查询的表进行比较,只有符合条件的行才会被返回。
  2. 子查询作为 HAVING 子句的一部分:先对 GROUP BY 子句指定的列进行分组,然后执行子查询。子查询的结果集将作为条件与分组后的每个组进行比较,只有符合条件的组才会被返回。
  3. 子查询作为 SELECT 子句的一部分:执行子查询,得到结果集。然后,将结果集作为列值添加到外层查询的结果集中。

需要注意的是,在实际应用中,子查询的执行顺序可能会受到数据库系统的优化和查询计划的影响,但总体上仍然遵循“由里及外”的原则。同时,为了提高查询效率,在编写子查询时,需要注意子查询的可读性和可维护性,避免过度嵌套和复杂的查询逻辑。

4.什么是SQL 语句中相关子查询与非相关子查询

3.1释义

非相关子查询

  • 子查询可以独立于外部查询进行执行和评估。
  • 子查询在外部查询执行之前被执行一次。
  • 子查询的结果不依赖于外部查询的具体行数据。

相关子查询

  • 子查询的执行与外部查询的每一行相关联。
  • 子查询需要根据外部查询的每一行数据进行多次评估。
  • 子查询中通常会引用外部查询中的某些列。

3.2区别

相关子查询和非相关子查询主要有以下区别:

非相关子查询

  1. 独立执行:子查询可以单独执行,不依赖于外部查询。
  2. 执行一次:子查询在外部查询处理之前执行一次。

相关子查询

  1. 依赖外部查询:子查询的执行与外部查询的每一行相关联。
  2. 多次执行:子查询会针对外部查询的每一行都执行一次。

3.3判断

可以通过以下几个方面来判断一个查询是相关子查询还是非相关子查询:

  1. 子查询是否依赖外部查询的结果:相关子查询的执行需要依赖外部查询的每一行数据,而非相关子查询则不依赖。
  2. 执行顺序:非相关子查询通常先执行子查询,然后再执行外部查询;相关子查询则与外部查询的执行过程交织在一起,子查询会针对外部查询的每一行多次执行。
  3. 子查询中是否引用外部查询的列:相关子查询中通常会引用外部查询的列,而非相关子查询一般不会。

3.4示例

以下是相关子查询和非相关子查询的例子:

非相关子查询:

  1. 获取所有员工中工资大于平均工资的员工信息:
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

相关子查询:

  1. 获取每个部门中工资最高的员工信息:
SELECT * FROM employees e1
WHERE salary = (SELECT MAX(salary) FROM employees e2 WHERE e2.department_id = e1.department_id);

以上,本期全部内容。

感谢阅读。

按例,欢迎点击此处关注我的个人公众号,交流更多知识。文章来源地址https://www.toymoban.com/news/detail-861129.html

到了这里,关于什么是SQL 语句中相关子查询与非相关子查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL语句之子查询

    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,

    2023年04月27日
    浏览(41)
  • SQL查询语句

    # 格式: select * from 表名 order by 要排序的列1 [asc/desc], 要排序的列2 [asc/desc]; # 解释: #   1. 无论SQL语句简单或者是复杂, order by语句一般都放最后, 注意: 如果有limit(分页), 则它(limit)在最后. #   2. asc表示升序, desc表示降序, 其中, 默认是升序, 所以asc可以省略不写. #   3. 如果排序的

    2024年02月05日
    浏览(40)
  • sql创建查询视图语句

    学生表 c表 s表 sc表   --1.查询全体学生的学号,姓名与年龄 SELECT sno,sname,age=year(getdate())-year(sbirth) FROM S; --2.查询计算机系(CS)的学生学号,姓名 SELECT sno,sname FROM S WHERE sdept=\\\'计算机\\\'; --3.查询计算机系所有的女生姓名和年龄 SELECT sname,age=(year(getdate())-year(sbirth)) FROM S WHERE sdept

    2024年02月05日
    浏览(59)
  • 【SQL】MySQL的查询语句

    MySQL是一种广泛使用的关系型数据库管理系统,它被广泛地应用于各种应用程序和网站。学会使用MySQL的查询语句可以帮助我们更好地管理和分析数据,从而更好地利用数据库中的信息。在本篇博客中,我们将深入学习MySQL的查询语句,包括 SELECT 语句、 WHERE 子句、 JOIN 语句等

    2024年02月06日
    浏览(45)
  • hive sql 语句查询规则

    注意: 1、order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。 2、sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks1,则sort by只保证每个reducer的输出有序,不保证全局

    2024年04月28日
    浏览(38)
  • SQL server 查询语句大全

    在 SQL Server 中,查询语句是最常用的语句类型,用于从数据库中提取有用的信息。SQL Server 中常用的查询语句有 SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY。 1. SELECT SELECT 语句用于从表中选取数据进行查询,语法如下: ```sql SELECT column1, column2, column3, ...   FROM table_name; ``` 在这个

    2024年02月13日
    浏览(51)
  • [MySQL]不允许你不会SQL语句之查询语句

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(87)
  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

    创建Students和Courses表 直接查询 设置别名查询 设置条件查询 使用COUNT(*) 和 COUNT(StudentID)是一样的效果,因为StudentID是主键,每行记录的主键都不同。另外我们在聚合查询中还是能使用WHERE子句的,比如我们要 查找年龄大于20岁的学生数量 ,可使用以下SQL语句: 函数 说明 SUM

    2024年02月09日
    浏览(123)
  • 解决Oracle SQL语句性能问题——SQL语句改写(视图、标量子查询及update)

    我们在前述文章中也已经提到,对于高版本的关系库,尤其是针对Oracle这样的关系库,绝大多数场景下,同一语义和结果的SQL语句的具体语法,不会成为SQL语句执行计划的影响因素,但在少数场景下,针对同一语义和结果的SQL语句的不同写法,数据库优化器最终会分别为其生

    2024年02月10日
    浏览(47)
  • 数据库作业-sql语句查询

    建表的插入数据的表 数据库作业-sql建表和插入数据_快乐的xiao何的博客-CSDN博客 create table supplier( supplierno char(6) primary key, suppliername nvarchar(10), address nvarchar(20), number char(11) )create table category( categoryno char(5) primary key, categoryname varchar(20), descriptions text... https://blog.csdn.net/m0_539670

    2023年04月23日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包