且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

你真的会玩SQL吗?无处不在的子查询

更新时间:2022-09-07 23:05:30

你真的会玩SQL吗?系列目录

你真的会玩SQL吗?之逻辑查询处理阶段

你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?查询指定节点及其所有父节点的方法

你真的会玩SQL吗?让人晕头转向的三值逻辑

你真的会玩SQL吗?EXISTS和IN之间的区别

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?Case也疯狂

你真的会玩SQL吗?表表达式,排名函数

你真的会玩SQL吗?简单的 数据修改

你真的会玩SQL吗?你所不知道的 数据聚合

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?冷落的Top和Apply

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

 

子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。 
所有的子查询可以分为两类,即相关子查询和非相关子查询 
1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 
2>相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。 
故非相关子查询比相关子查询效率高 

--非相关子查询 
SELECT EMPNO, LASTNAME 
FROM EMPLOYEE 
WHERE WORKDEPT = 'A00' 
AND SALARY > (SELECT AVG(SALARY) 
FROM EMPLOYEE 
WHERE WORKDEPT = 'A00') 

--相关子查询 
SELECT E1.EMPNO, E1.LASTNAME, E1.WORKDEPT 
FROM EMPLOYEE E1 
WHERE SALARY > (SELECT AVG(SALARY) 
FROM EMPLOYEE E2 
WHERE E2.WORKDEPT = E1.WORKDEPT
ORDER BY E1.WORKDEPT 
 

 子查询

 你真的会玩SQL吗?无处不在的子查询

 

嵌套子查询,非相关子查询   

相关例子 相关子查询和嵌套子查询 [SQL Server]

你真的会玩SQL吗?无处不在的子查询

 

相关子查询

 你真的会玩SQL吗?无处不在的子查询

自联接

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?无处不在的子查询

联合查询

•Union 操作符:将两个或更多个 SELECT 语句的结果合并为一个结果集。
•联合可以指定为如下形式:

     SELECT 语句    UNION [ALL]           SELECT 语句

使用 ALL 子句表示不删除重复的行

你真的会玩SQL吗?无处不在的子查询

 联合查询注意事项:

  1. 每个select必须具有相同的列结构
  2. 兼容列类型(指优先级较低数据类型必须能隐式地转换为较高级的数据类型)和相同数目的列

 

练习:

使用子查询

你真的会玩SQL吗?无处不在的子查询
/*1:写一条查询语句,返回Orders表中活动的最后一天生成的所有订单。
涉及的表:Sales.Orders表。
期望的输出:*/
orderid     orderdate               custid      empid
----------- ----------------------- ----------- -----------
11077       2008-05-06 00:00:00.000 65          1
11076       2008-05-06 00:00:00.000 9           4
11075       2008-05-06 00:00:00.000 68          8
11074       2008-05-06 00:00:00.000 73          7
你真的会玩SQL吗?无处不在的子查询

参考SQL:

你真的会玩SQL吗?无处不在的子查询 View Code
你真的会玩SQL吗?无处不在的子查询
/*2:写一条查询语句,并返回2008年5月1号(包括这一天)以后没有处理过的订单的雇员。
涉及到表:HR.Employees表和Sales.Orders表。
期望的输出:*/
empid       FirstName  lastname
----------- ---------- --------------------
3           Judy       Lew
5           Sven       Buck
6           Paul       Suurs
9           Zoya       Dolgopyatova
你真的会玩SQL吗?无处不在的子查询

参考SQL:

你真的会玩SQL吗?无处不在的子查询 View Code
你真的会玩SQL吗?无处不在的子查询
/*3:写一条查询语句,返回订购了第12号产品的客户。
涉及的表:Sales.Customers表和Sales.Orders表。
期望的输出:*/
custid      companyname
----------------------------------------
48          Customer DVFMB
39          Customer GLLAG
71          Customer LCOUJ
65          Customer NYUHS
44          Customer OXFRU
51          Customer PVDZC
86          Customer SNXOJ
20          Customer THHDP
90          Customer XBBVR
46          Customer XPNIK
31          Customer YJCBX
87          Customer ZHYOS
你真的会玩SQL吗?无处不在的子查询

参考SQL:

你真的会玩SQL吗?无处不在的子查询 View Code

 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/4915126.html如需转载请自行联系原作者


欢醉