嵌套查询

  • 1. 概述
  • 2. 普通子查询
    • 2.1. 子查询执行后返回一个值时,可在子查询与父查询之间用比较运算符连接
    • 2.2. 子查询执行后返回一组值时,不能直接用比较运算符连接子查询,可在比较运算符与子查询之间插入关键字 `ANY`或`ALL`实现查询过程
  • 3. 相关子查询

1. 概述

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

2. 普通子查询

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

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

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

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

  1. ALL的含义为全部,与比较运算符连接并写在子查询之前,表示与查询结果中的所有值进行比较;

3. 相关子查询

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

select distinct Name
from B
where '2022090102'<> all (select ID from O where ID=B.ID )


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

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的语句后用 “*” 简写列名;

SQL Server 数据库之嵌套查询相关推荐

  1. delphi使用MS Sql Server数据库的分布式查询

    目录 delphi使用MS Sql Server数据库的分布式查询 一.链接服务器 1.1.简单的链接服务器 1.2.含多数据库架构的全链接服务器 1.3.链接服务器的理论与总结 语法: 参数: 本系 ...

  2. SQL Server数据库的T-SQL查询语句

    一.SQL简介 在进行数据管理时,使用SSMS进行数据维护有可视化.方便的优点,但是在批量维护或重复维护数据时,每次都需要使用SSMS不但不方便,而且容易出错.通过编写SQL语句来维护数据库便于解决重 ...

  3. SQL Server 数据库多表查询

    完整表格见博文:https://blog.csdn.net/weixin_44410704/article/details/118252624 一.实验目的 1.掌握Select语句的基本语法: 2. ...

  4. SQL SERVER数据库多条件查询

    例如:查询挂号超500的数据 select CONVERT(VARCHAR(10),DGH,23),COUNT(*) from yxhis2017..VTBMZGHMX2017 where bth=0 ...

  5. SQL Server 数据库的统计查询

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/shiyangkai/article/details/71642184 基础数据库表Table为: 查 ...

  6. SQL server 数据库单表查询前n%行

    use EMIS go select top 10 percent * from t_course_reg go

  7. SQL server 数据库单列分组查询

    use EMIS go select student_id,max(score) 最高分,min(score) 最低分,count(score) 成绩记录条数 from t_course_reg gr ...

  8. python连接sql server数据库并模糊查询

    目录 前言 一.上代码 前言 纯粹记录:含泪记录

  9. SQL Server数据库优化方案

    SQL Server数据库优化方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计 ...

最新文章

  1. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全
  2. Socket,SocketImpl与SocketImplFactory的关系
  3. python的head函数_python – 是否有一个pandas函数来显示第一个/最后一个n列,如.head().tail()?...
  4. python3模块socket怎么安装_Python中socket模块的使用方法(一)
  5. POI如何自定义单元格背景颜色
  6. 常用的 16 个 Sublime Text 快捷键
  7. java 8 lambda_Java 8 Lambda演练
  8. git灰度发布版本_spring cloud灰度发布
  9. dataframe切片_Kaggle:识别淋巴结病理切片有无癌细胞(logistic+svm+rf+CNN)
  10. 使用python制作ArcGIS插件(5)其他技巧
  11. directshow
  12. 软件架构-nginx详解上
  13. 运用gm/id法设计二级运放教程
  14. Web服务器群集--Nginx网站服务(运行控制,访问状态统计,基于授权和客户端的访问控制,基于域名,端口,IP的虚拟web主机访问)
  15. 【720开发】 spring boot 快速入门
  16. stm32入门——定时器中断和中断优先级简介
  17. C++算法进制间的转换
  18. 【<HTTP专题>】
  19. 复杂度分析--时间复杂度
  20. 查询手机号码注册和绑定的平台攻略

热门文章

  1. The fourth,fifth,sixth,seventh episode of Crazily Speak English
  2. win7原版镜像_AMD平台B450主板安装WIN7教程
  3. 一图看清公募基金十年持仓行业变迁
  4. neo4j ogm_带有Hibernate OGM的NoSQL –第二部分:查询数据
  5. iphone配置Charles抓包
  6. 中国互联网量级分化严重:小米将360踢出第二阵营
  7. 服务器如何数据备份?
  8. 打开html就自动到搜狗网扯,今天一打开IE浏览器,页就一直是搜狗网址导航,怎么改也改不掉,...
  9. 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高性能产品
  10. c# datagirdview报dataerror请处理等等