深入了解子查询

 1 SELECT DISTINCT soh.OrderDate,sod.ProductID
 2 FROM Sales.SalesOrderHeader soh
 3 LEFT JOIN sales.SalesOrderDetail sod
 4     ON soh.SalesOrderID =sod.SalesOrderID
 5 WHERE soh.OrderDate =(
 6     SELECT MIN(OrderDate) FROM Sales.SalesOrderHeader)
 7
 8 --子查询
 9 SELECT e.BusinessEntityID,FirstName,LastName
10 FROM HumanResources.Employee e
11 JOIN Person.Person pp
12     ON e.BusinessEntityID=pp.BusinessEntityID
13 WHERE e.BusinessEntityID IN
14 (SELECT DISTINCT BusinessEntityID FROM HumanResources.JobCandidate)
15
16 --用连接代替子查询 JOIN 默认为INNER JOIN
17 SELECT e.BusinessEntityID,FirstName,LastName
18 FROM HumanResources.Employee e
19 JOIN Person.Person pp
20     ON e.BusinessEntityID=pp.BusinessEntityID
21 JOIN HumanResources.JobCandidate jc
22     ON jc.BusinessEntityID=e.BusinessEntityID
23
24 -- 与NULL值比较总会得到NULL
25 SELECT e.BusinessEntityID,FirstName,LastName
26 FROM HumanResources.Employee e
27 JOIN Person.Person pp
28     ON e.BusinessEntityID=pp.BusinessEntityID
29 WHERE e.BusinessEntityID NOT IN
30 (SELECT DISTINCT BusinessEntityID FROM HumanResources.JobCandidate
31     WHERE BusinessEntityID IS NOT NULL)
32
33 -- WHERE 子句中的相关子查询
34 --查询每一位客户在系统中的第一份订单的OrderID, OrderDate
35 /* 使用外面查询中的CustomerID,进行内部查询,得出一个客户的最早订单日期,返回给外部查询*/
36
37 SELECT o1.CustomerID,o1.SalesOrderID,o1.OrderDate
38 FROM Sales.SalesOrderHeader o1
39 WHERE o1.OrderDate=(SELECT MIN(o2.OrderDate)
40                     FROM Sales.SalesOrderHeader o2
41                     WHERE o2.CustomerID=o1.CustomerID ) -- 内部查询对外部的引用
42 ORDER BY o1.CustomerID
43
44 -- SELECT 子句中的相关子查询
45 SELECT pp.FirstName,pp.LastName,
46     (SELECT MIN(OrderDate)
47         FROM Sales.SalesOrderHeader ord_h
48         WHERE ord_h.CustomerID=c.CustomerID
49     ) AS OrderDate
50 FROM Person.Person pp
51 JOIN Sales.Customer c
52     ON pp.BusinessEntityID=c.PersonID
53
54 -- 派生表 派生表并不能解决所有问题, 结果相当庞大而且有大量记录要联结时,可能要考虑使用临时表并在其上构建索引(派生表没有索引)
55 -- 查询要求, 查询订过 迷你水泵 又订过 AWC Logo Cap 帽的所有客户
56
57 SELECT DISTINCT    -- DISTINCT 去除重复订购的人
58         PP.FirstName ,
59         PP.LastName
60 FROM    Person.Person AS pp
61         JOIN ( SELECT   sc.PersonID
62                FROM     Sales.Customer sc
63                         JOIN Sales.SalesOrderHeader AS ord_h ON sc.CustomerID = ord_h.CustomerID
64                         JOIN Sales.SalesOrderDetail AS ord_d ON ord_d.SalesOrderID = ord_h.SalesOrderID
65                         JOIN Production.Product AS prd ON prd.ProductID = ord_d.ProductID
66                WHERE    prd.Name = ‘Minipump‘
67              ) pumps ON pp.BusinessEntityID = pumps.PersonID
68         JOIN ( SELECT   sc.PersonID
69                FROM     Sales.Customer sc
70                         JOIN Sales.SalesOrderHeader AS ord_h ON sc.CustomerID = ord_h.CustomerID
71                         JOIN Sales.SalesOrderDetail AS ord_d ON ord_d.SalesOrderID = ord_h.SalesOrderID
72                         JOIN Production.Product AS prd ON prd.ProductID = ord_d.ProductID
73                WHERE    prd.Name = ‘AWC Logo Cap‘
74              ) caps ON pp.BusinessEntityID = caps.PersonID
75
76 -- Exists 运算符
77 SELECT  e.BusinessEntityID ,
78         FirstName ,
79         LastName
80 FROM    HumanResources.Employee e
81         JOIN Person.Person pp ON e.BusinessEntityID = pp.BusinessEntityID
82 WHERE   EXISTS ( SELECT BusinessEntityID
83                  FROM   HumanResources.JobCandidate jc
84                  WHERE  e.BusinessEntityID = jc.BusinessEntityID )
85
86
87
88 -- 以上摘自SQL Server 2008 高级程序设计
时间: 2024-10-12 03:51:00

深入了解子查询的相关文章

子查询

子查询返回单行多列: ANY三种用法: ALL两种用法:

SQL Server子查询填充DataSet时报500内部错误的解决办法

运行环境为Visual Studio 2010,数据库为SQL Server 2008. 执行下面SQL语句 SELECT SubsiteId, SubsiteTitle, count(CollectionID) CollectionNumber,count(LName) PlantNumber FROM (SELECT DISTINCT SubsiteId, SubsiteTitle, CollectionID, LName, CName FROM Cumplag_Garden_Plants

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

前端学数据库之子查询

查询数据库,当查询条件比较复杂时,常常需要用到子查询.子查询(Subquery)是指出现在其他SQL语句内的SELECT子句.本文将详细介绍子查询 定义 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句 SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(Su

ThinkPHP3.2 SQL alias 子查询

SELECT info_key, info_value, info_status, edit_time FROM (SELECT * FROM `detail` WHERE login = '[email protected]' ORDER BY edit_time DESC  ) AS aaa GROUP BY info_key 希望通过Thinkphp实现基于alias的子查询,终于参考下面这个文章实现了. http://www.thinkphp.cn/update/122.html 如下是

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

mysql子查询慢的问题

当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了,你已经掉入了mysql子查询慢的"坑"...下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN (SELECT gid FROM shop_goods g2 WHERE si

Mysql——子查询

子查询的位置: select 中.from 后.where 中.group by 和order by 中无实用意义. 子查询分为如下几类: 1,标量子查询:返回单一值的标量,最简单的形式. 2,列子查询:返回的结果集是 N 行一列. 3,行子查询:返回的结果集是一行 N 列. 4,表子查询:返回的结果集是 N 行 N 列. 可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS 标量子查询:是指子查询返回的是单一值的标量,如一个数字

彻底搞懂oracle的标量子查询

oracle标量子查询和自定义函数有时用起来比较方便,而且开发人员也经常使用,数据量小还无所谓,数据量大,往往存在性能问题. 以下测试帮助大家彻底搞懂标量子查询. SQL> create table a (id int,name varchar2(10)); Table created. SQL> create table b (id int,name varchar2(10)); Table created. SQL> insert into a values (1,'a1'); 1

SQL----关联子查询

在where子句中使用子查询时,该子查询的结果必须是单一的 所以在以不同商品为单位,对售价进行比较就要用到关联子查询 如下表格:Table_2 ID 商品 售价 1 苹果 15 2 猕猴桃 11 3 梨 22 4 梨 23 5 猕猴桃 23 6 梨 12 7 猕猴桃 10 8 猕猴桃 3 9 苹果 5 SELECT * FROM Table_2 AS S1 WHERE 售价>(SELECT AVG(售价) FROM Table_2 AS S2 WHERE S1.商品=S2.商品 /*结合条件一定