今天给大家介绍以下SQLServer子查询相关知识,希望对大家能有所帮助!

1、子查询概念介绍

子查询可以嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询语句中的查询,子查询一般作为查询中间结果集角色,子查询也称为内部查询或内部选择,包含子查询的语句称为外部查询或外部选择。根据可用系统内存和查询中其他表达式的复杂程度的不同,嵌套限制也有所不同,一般可以支持嵌套32层。个人建议尽量避免多层嵌套这样SQL语句的可读性和可维护性都会很差。使用表达式的地方一般都可以使用子查询。

2、子查询分类

单值子查询:子查询的返回值属于单个。常见与查询列、单值的查询条件使用。

多值子查询:子查询的返回值多个。常见in、exists等筛选语句使用。

3、子查询的使用场景

3.1 选择列表中使用子查询

选择列表中使用子查询作为查询结果一列值出现的。该情况下调用子查询返回的只能是单值。只能是单值子查询。

-- 查询学生姓名、年龄、总成绩select a.username,a.age,(select sum(score)
from Score where userId=a.userId)) totalScorefrom UserInfo a
3.2 作为查询条件
-- 查询部门名称是技术部的员工信息 单值查询
select username,age,address from Emp
where deptno=(select top 1 deptno
from DeptInfo where depName='技术部');
-- 查询产品库存大于10吨的产品列表 多值查询
select name,code from ProductInfo
where Code in (select s.code from StockInfo s where qty>20);
同样的insert、update、delete用法比较类似比如:
-- 删除库存量为0的产品
delete from ProductInfo
where Code in (select s.code from StockInfo s where qty=0);
-- 更新库存量为0的产品remark字段更新为标记
update ProductInfo set remark='标记'
where Code in (select s.code from StockInfo s where qty=0)

4、子查询和连接查询的关系

很多包含子查询的SQL语句都可以改成连接查询的形式表示,包含子查询的语句和语义上等效的无子查询的语句性能差别不大。但针对检查存在性的情况中,联接查询性能更好,数据量越大联接查询会更能体现效率。

比如:

-- 查询学生姓名、年龄、总成绩
select min(a.username),min(a.age),sum(score) totalScore
from UserInfo a
left join Score b on a.userId=b.userId

5、包含in和exists子查询区别

in子查询:结果是包含0个或者多个值的列表,表示值的等于关系。

exists子查询:它只返回true或false。表示一种存在的行为。

通常情况下in和exist可以互换。

当子查询结果不存在NULL值时,not in和not exists得到的查询结果一样,所生成的查询计划也一样。

当in里面的值为null的情况下查询记录为0;当exists里面的值为null情况下相当于查询条件不起作用。

示例:

select name,age UserInfo where userId in (1,2,3,4);
select name,age UserInfo where exists (1,2,3,4);

说明:EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

6、包含比较运算符的子查询

子查询可以由一个比较运算符(=、<>、>、>=、<、!>、!<或<=)引入。使用比较运算符引入的子查询必须返回单个值而不能一个值列表。否则,SQL Server将显示一条错误信息。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

SQLServer子查询相关知识笔记相关推荐

  1. SQLServer数据库文件相关知识笔记

    1.数据库文件概念 数据库文件是SQLServer数据库的物理体现,和计算机的普通文件一样存储在计算机的磁盘空间当中.作为数据库记录和日志等其他信息的存储载体. 2.数据库文件分类 数据库文件主要包括 ...

  2. SQLServer数据库收缩相关知识笔记

    1.为什么要进行数据库收缩? SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存 ...

  3. SQLServer数据库实例相关知识笔记

    1.概念介绍 SQL实例实际上就是SQL服务器引擎,每个SQL Server数据库引擎实例各有一套不为其他实例共享的系统及用户数据库. 在一台计算机上,可以安装多个SQL SERVER,每个SQL S ...

  4. 四、MySQL分页查询 + 子查询复习 学习笔记 (复习连接查询相关内容 详解)

    8:分页查询 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求 语法: SELECT 查询列表 FROM 表名 [JOIN type JOIN 表2 ON 连接条件 WHERE 筛选条件 ...

  5. 数据库系统故障相关知识笔记

    数据库系统中可能发生的故障主要包括事务故障.系统故障.介质故障.计算机病毒等.下面给大家简单整理一下相关的故障知识笔记. 1.事务故障 事务故障是因为程序执行错误而引起的非预期.异常终止的故障.主要有 ...

  6. 事务管理基础:数据库的并发控制相关知识笔记

    1.并发操作的概念介绍 并发操作主要是指在多用户共享的系统当中,可能存在很多用户同时对同一个数据进行操作.并发操作会造成丢失更新.不可重复读.读脏数据.主要原因是事务的并发操作破坏了事务的隔离性. 2 ...

  7. 金蝶业务+sqlserver子查询

    因为sqlserver和mysql分组方式不同用到了这个子查询的demo --子查询 派生表SELECT I.FNumber,I.FName,D.*,isnull(D.入库,0)-isnull(D.出 ...

  8. SQLServer数据库文件组相关知识笔记

    1.数据库文件组概念 数据库文件被组织在称为"文件组"的逻辑组中.文件组是所创建对象(如表或索引)的目标容器,对象数据将分散在其所在目标文件组的文件中,文件组可以按你要求的方式来控 ...

  9. Spring系列(十三):AOP相关知识笔记

    今天给大家分享AOP相关的知识,希望对大家能有所帮助! 1.AOP定义 AOP全称为Aspect Oriented Programming,中文含义为:面向切面编程. 通过预编译方式和运行期动态代理实 ...

最新文章

  1. linux下sudo命令[转]
  2. c# redis hashid如何设置过期时间_Redis数据库实现原理(划重点)
  3. 小型项目服务器要多少,小型服务器需要什么配置
  4. TeeChart中 Line的Clear方法
  5. C#属性详解及属性与函数间的对比
  6. mysql数据库用doc命令,myMySQL数据库怎么使用dos命令安装? MySQL数据库使用教程
  7. Python实现图像信息隐藏
  8. SLAM_轨迹算法精度评价指标(ATE、RPE)
  9. python中计算带分数_[NVDA addon] Access8Math 2.3 數學輔助程式 - 更新相容於 python3
  10. 简单数论入门和基础数学知识(未完)
  11. VBScript教程
  12. 使用dockerfile创建一个包含jdk和tomcat的镜像
  13. 推荐几个高质量图片网站,再也不怕没图装X了
  14. 从一个帝国的消逝,看商业组织的进化
  15. 从零开始学前端 - 7. CSS盒模型 margin和padding详解
  16. linux jboss的安装路径,LINUX下JBOSS的安装及配置
  17. linux中页缓冲和块缓冲之概念
  18. 野三坡 小麻核桃大文化
  19. .NET Core Swagger配置增强版ui
  20. java 操作accdb_使用Java创建Access数据库文件(.mdb或.accdb)

热门文章

  1. getElementById() getElementsByName() getElementsByTagName()
  2. ASP.Net中实现中英文复合检索文本框
  3. 关于通过Sql注入直接拖数据的讨论
  4. 可伸缩视频编码svc
  5. 南理工计算机技术专业学位,南京理工大学计算机技术(专业学位)考研难吗
  6. 淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...
  7. python函数参数类型及顺序_python函数参数类型及其顺序
  8. 1到30图片大全顺序_终于解决了!自媒体作者,如何给 Word 中的图片批量编号?...
  9. linux下用户操作
  10. 【c++基础】vector中按照Point类型某一个变量进行排序