首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >sql的嵌套查询_sqlserver跨库查询

sql的嵌套查询_sqlserver跨库查询

作者头像
全栈程序员站长
发布2022-09-22 16:52:41
发布2022-09-22 16:52:41
4.1K0
举报

大家好,又见面了,我是你们的朋友全栈君。

嵌套查询

1. 概述

在 SQL 中,一个形如 SELECT-FROM-WHERE的语句称为一个查询快;当一个查询块存在于另一个查询块的 WHERE子句或 HAVING子句中时,称前一个查询块为子查询,称包含它的查询块为父查询或外部查询; 采用子查询的查询称为嵌套查询,嵌套查询可将多个简单的查询构造成一个复杂的查询,体现了 SQL 强大的查询能力; 嵌套查询在执行时由内向外处理语句,因为处理父查询时要用到子查询的查询结果,所以子查询的处理要先于它的父查询;

2. 普通子查询

普通子查询指子查询可独立完成的查询,它的执行过程为:先执行子查询,然后将子查询的结果用于构造父查询的查询条件,再由父查询根据查询条件确定结果集合; 普通子查询一般可分为如下两种:

2.1. 子查询执行后返回一个值时,可在子查询与父查询之间用比较运算符连接

2.2. 子查询执行后返回一组值时,不能直接用比较运算符连接子查询,可在比较运算符与子查询之间插入关键字 ANYALL实现查询过程

  1. ANY的含义为任意一个,与比较运算符连接并写在自子查询之前,表示与查询结果中的任意值进行比较; 例子:从数据表 B,O 中查询就读 “工商” 专业的学生姓名
代码语言:javascript
复制
select Name
from B
where b= any (select b from O where b='工商')
  1. ALL的含义为全部,与比较运算符连接并写在子查询之前,表示与查询结果中的所有值进行比较;

3. 相关子查询

相关子查询指子查询的查询条件需要引用父查询中相关属性值的查询,是特殊的嵌套查询; 这类查询在执行时,先选取父查询中的数据表的第一个元组,内部的子查询对其中的先关属性值进行查询,再由父查询根据子查询返回的结果判断是否满足查询条件,重复此过程,知道处理完父查询中数据表的每一个元组; 例子:从数据表 B,O 中国查询没有就读“工商”专业的学生姓名

代码语言:javascript
复制
select distinct Name
from B
where '2022090102'<> all (select ID from O where ID=B.ID )

<> all 表示不等于子查询结果中的任何一个值,可使用 NOT IN 代替; 例子:用 EXISTS关键字从数据表 B,O 中国查询没有就读“工商”专业的学生姓名

代码语言:javascript
复制
select distinct Name
from B
where not exists (select * from O where ID=B.ID and ID='2022090102')

EXISTS表示存在,用来判断子查询的结果是否为空,若查询结果不为空返回逻辑值“真”,反之返回逻辑值 “假”;在 EXISTS 前加上 NOT表示不存在,返回值与 EXISTS 相反;

注意: EXISTSNOT EXISTS的返回值不含有任何数据,只要逻辑值 “真” 或 “假”,即一般在子查询的 SELECT的语句后用 “*” 简写列名;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169424.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 嵌套查询
  • 1. 概述
  • 2. 普通子查询
    • 2.1. 子查询执行后返回一个值时,可在子查询与父查询之间用比较运算符连接
    • 2.2. 子查询执行后返回一组值时,不能直接用比较运算符连接子查询,可在比较运算符与子查询之间插入关键字 ANY或ALL实现查询过程
  • 3. 相关子查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档