SQL Server2019数据库之简单子查询的具有方法
作者:Amo Xiang 发布时间:2024-01-21 23:27:31
子查询可以完成 SQL 查询中比较复杂的情况,本章主要介绍一些子查询的简单用法。
一、简单子查询
1、简单子查询
子查询是 SELECT 语句内的另外一条 SELECT 语句。通常,语句内可以出现表达式的地方都可以使用子查询。另外,子查询可以从任何表中提取数据,只要对该表有适当的访问权限即可。因此,通过在一个查询内或者在另一个子查询内嵌套子查询,可以从两个或多个表中组合信息而不必编写复杂的整个组合表,然后再过滤掉多余的或不相关的联合行的JOIN语句。
子查询的语法与普通的 SELECT 查询的语法相同,子查询可以包含联合、WHERE 子句、HAVING 子句和 GROUP BY子句。
1.1 子查询的语法
子查询的语法如下:
(SELECT [ALL | DISTINCT]<select item list>
FROM <table list>
[WHERE<search condition>]
[GROUP BY <group item list>
[HAVING <group by search condition>]])
语法规则:
子查询的 SELECT 查询必须使用圆括号括起来。
不能包括 COMPUTE 或 FOR BROWSE 子句。
如果同时指定 TOP 子句,则可能只包括 ORDER BY 子句。
子查询最多可以嵌套 32 层。
任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中。
1.2 子查询常用的语法格式
(1) 第一种语法格式
WHERE 查询表达式 [NOT] IN(子查询)
(2) 第二种语法格式
WHERE 查询表达式 比较运算符 [ANY|ALL](子查询)
(3) 第三种语法格式
WHERE [NOT] EXISTS(子查询)
1.3 子查询与其他 SELECT语句之间的区别
子查询除了必须在括号中出现以外,与其他 SELECT 语句之间还有以下几点不同。
SELECT 语句只能使用那些来自 FROM 子句中的表中的列,子查询不仅可以使用在该子查询的 FROM 子句中的表,而且还可以使用子查询的 FROM 子句中表的任何列。
SELECT 语句中的子查询必须返回单一数据列。另外,根据其在查询中的使用方法(如将子查询结果用作包括子查询的 SELECT 子句中的一个数据项),包括子查询的查询可能要求子查询返回单个值(而不是来自单列的多个值)。
子查询不能有 ORDER BY 子句(因为用户看不到返回多个数据值的子查询的结果表,所以对隐藏的中间结果表排序就没有什么意义)。
子查询必须由一个 SELECT 语句组成,也就是不能将多个 SQL 语句用 UNION 组合起来作为一个子查询。
2、SELECT 列表中的子查询
子查询是 SELECT 查询内的返回一个值的表达式,就像返回值中的单个列一样。但是,在一个表达式中,子查询必须只返回一条记录,这样的子查询被称为标量子查询(scalar subquery),也必须被封闭在圆括号内。
【例1】根据图书的作者,获取不同作者编写的图书中价格最高的信息。SQL 语句如下:
SELECT tb_book_author,tb_author_department,
(SELECT MAX(book_price) FROM tb_book
WHERE tb_book_author.tb_book_author = tb_book.tb_book_author) AS 价格
FROM tb_book_author;
查询结果如下图所示:
3、比较子查询
在 WHERE 子句中可以使用单行比较运算符来比较某个表达式与子查询的结果,可以使用的比较运算符包括:=、>、>=、<、<=、<>(或!=)等。这些比较运算符都可以连接一个子查询,且在使用 ALL 或者 ANY 修饰的比较运算符连接子查询时,必须保证子查询所返回的结果集合中只有单行数据,否则将引起查询错误。
【例2】应用比较运算符 >
,查询商品信息表 goods 中 cat_id 的值大于品牌表 brand 中品牌名称为 蓝月亮
的商品信息。SQL 语句如下:
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT cat_id FROM brand WHERE name='蓝月亮');
查询结果如下图所示:
由于子查询只能返回一个值,因此,如果子查询的结果不是返回单个值,那么系统就会发出错误信息。
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT * FROM brand WHERE name='蓝月亮');
执行该 SQL 语句,如下图所示:
子查询中不能包含 ORDER BY 子句,看下面的 SQL 语句:
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT cat_id FROM brand WHERE name='蓝月亮' ORDER BY cat_id);
执行该 SQL 语句,如下图所示:
4、子查询中使用聚合函数
聚合函数 SUM()、COUNT()、MAX()、MIN() 和 AVG() 都返回单个值。在子查询中应用聚合函数,并将该函数返回的结果应用到 WHERE 子句的查询条件中。
【例3】应用聚合函数 AVG(求 emp 员工表中员工的平均工资,并将结果作为 WHERE 子句的查询条件,通过 SQL 语句获取工资大于平均工资的员工信息。SQL 语句如下:
SELECT ename, sal, job
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);
查询结果如下图所示:
小结:本章讲解了子查询的简单用法。子查询是 SELECT 语句内的另外一条 SELECT 语句,也被称为 SQL 查询的嵌套。在实际开发中,一条 SQL 语句中不要嵌套太多子查询,否则会降低系统效率,影响代码的可读性。
来源:https://blog.csdn.net/xw1680/article/details/116108496
猜你喜欢
- sql2000安全很重要将有安全问题的SQL过程删除.比较全面.一切为了安全!删除了调用shell,注册表,COM组件的破坏权限use&nb
- 学习网络爬虫难免遇到使用代理的情况,下面介绍一下如何使用requests设置代理:如果需要使用代理,你可以通过为任意请求方法提供 proxi
- 一.文件基本操作1.1 文件打开和关闭open(‘文件名称','打开模式')模式:r(只读,指针再头) w(只写,存
- 级联查询在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table
- python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合
- 对于时间的选择问题,查到的大部分为两种情况:1.存在readonly属性的2.没有readonly属性的可直接赋值send_keys()测试
- 本文介绍TSV文件类型及其应用,同时介绍Golang语句读取TSV文件并转为struct的实现过程。认识TSV文件也许你之前不了解TSV文件
- 第五个页面name="changenick.php" <? include &q
- 用CSV格式来保存文件是个不错的主意,因为大部分程序设计语言和应用程序都能处理这种格式,所以交流起来非常方便。然而这种格式的存储效率不是很高
- Python 处理数据的实例详解最近用python(3.2的版本)写了根据特定规则,处理数据的一个小程序,用到了一些python常用的基础知
- 1. composer 安装 PDF组件composer require setasign/fpdicomposer require set
- 1、灵活运用样式熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custo
- 在实用美术中,常有"远看色彩近看花,先看颜色后看花,七分颜色三分花"的说法。这也就说明,在任何设计中,色彩对视觉的刺激起
- 本文实例讲述了python使用xmlrpclib模块实现对百度google的ping功能。分享给大家供大家参考。具体分析如下:最近在做SEO
- 使用time模块可以查看并处理时间和日期相关内容。一、时间的表示格式在Python中,表示时间的格式有4种较为常用,分别是浮点数格式、标准可
- 前言有多种 Python 模块用于隐藏用户输入的密码,其中一个是**maskpass()模块。在 Python 中,借助maskpass()
- 本文实例讲述了Python自定义函数计算给定日期是该年第几天的方法。分享给大家供大家参考,具体如下:写一个函数,计算给定日期是该年的第几天.
- itertools模块的介绍在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出
- 今天终于抽出时间瞟了一眼JavaScript的新标准ECMA262v5,让我欣喜的是,不像是因为过于激进而被废除的v4,这个新标准对Java
- Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的。使用Ruby您不仅