• 售前

  • 售后

热门帖子
入门百科

SQL Server2019数据库之简单子查询的具有方法

[复制链接]
小雨敲窗y 显示全部楼层 发表于 2021-8-14 15:16:20 |阅读模式 打印 上一主题 下一主题
子查询可以完成 SQL 查询中比力复杂的环境,本章主要先容一些子查询的简单用法。
一、简票据查询

1、简票据查询

子查询是 SELECT 语句内的别的一条 SELECT 语句。通常,语句内可以出现表达式的地方都可以使用子查询。别的,子查询可以从任何表中提取数据,只要对该表有得当的访问权限即可。因此,通过在一个查询内大概在另一个子查询内嵌套子查询,可以从两个或多个表中组合信息而不必编写复杂的整个组合表,然后再过滤掉多余的或不干系的连合行的JOIN语句。
子查询的语法与平凡的 SELECT 查询的语法雷同,子查询可以包罗连合、WHERE 子句、HAVING 子句和 GROUP BY子句。
1.1 子查询的语法
子查询的语法如下:
  1. (SELECT [ALL | DISTINCT]<select item list>
  2. FROM <table list>
  3. [WHERE<search condition>]
  4. [GROUP BY <group item list>
  5. [HAVING <group by search condition>]])
复制代码
语法规则:
       
  • 子查询的 SELECT 查询必须使用圆括号括起来。   
  • 不能包罗 COMPUTE 或 FOR BROWSE 子句。   
  • 如果同时指定 TOP 子句,则大概只包罗 ORDER BY 子句。   
  • 子查询最多可以嵌套 32 层。   
  • 任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。   
  • 如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包罗在输出中。
1.2 子查询常用的语法格式
(1) 第一种语法格式
  1. WHERE 查询表达式 [NOT] IN(子查询)
复制代码
(2) 第二种语法格式
  1. WHERE 查询表达式 比较运算符 [ANY|ALL](子查询)
复制代码
(3) 第三种语法格式
  1. 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 语句如下:
  1. SELECT tb_book_author,tb_author_department,
  2. (SELECT MAX(book_price) FROM tb_book
  3. WHERE tb_book_author.tb_book_author = tb_book.tb_book_author) AS 价格
  4. FROM tb_book_author;
复制代码
查询结果如下图所示:


3、比力子查询

在 WHERE 子句中可以使用单行比力运算符来比力某个表达式与子查询的结果,可以使用的比力运算符包罗:=、>、>=、<、<=、<>(或!=)等。这些比力运算符都可以毗连一个子查询,且在使用 ALL 大概 ANY 修饰的比力运算符毗连子查询时,必须保证子查询所返回的结果聚会合只有单行数据,否则将引起查询错误。
【例2】应用比力运算符
  1. >
复制代码
,查询商品信息表 goods 中 cat_id 的值大于品牌表 brand 中品牌名称为
  1. 蓝月亮
复制代码
的商品信息。SQL 语句如下:
  1. SELECT cat_id, goods_nameFROM goodsWHERE cat_id>(SELECT cat_id FROM brand WHERE name='蓝月亮');
复制代码
查询结果如下图所示:



由于子查询只能返回一个值,因此,如果子查询的结果不是返回单个值,那么系统就会发堕落误信息。
  1. SELECT cat_id, goods_nameFROM goodsWHERE cat_id>(SELECT * FROM brand WHERE name='蓝月亮');
复制代码
执行该 SQL 语句,如下图所示:



子查询中不能包罗 ORDER BY 子句,看下面的 SQL 语句:
  1. SELECT cat_id, goods_nameFROM goodsWHERE 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 语句如下:
  1. SELECT ename, sal, jobFROM empWHERE sal > (SELECT AVG(sal) FROM emp);
复制代码
查询结果如下图所示:


小结:本章讲授了子查询的简单用法。子查询是 SELECT 语句内的别的一条 SELECT 语句,也被称为 SQL 查询的嵌套。在现实开发中,一条 SQL 语句中不要嵌套太多子查询,否则会低沉系统服从,影响代码的可读性。
到此这篇关于SQL Server2019数据库之简票据查询的具有方法的文章就先容到这了,更多干系SQL Server2019子查询内容请搜刮草根技术分享从前的文章或继承欣赏下面的干系文章渴望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作