目录
-
SQL Server 子查询
子查询是嵌套在另一个语句(如:[SELECT],[INSERT],[UPDATE]或[DELETE])中的查询。
以下语句显示如何在 SELECT 语句的[WHERE]子句中使用子查询来查找位于纽约( New York )的客户的销
售订单:
-
SELECT
-
-
order_id,
-
-
order_date,
-
-
customer_id
-
-
FROM
-
-
sales.orders
-
-
WHERE
-
-
customer_id
IN (
-
-
SELECT
-
-
customer_id
-
-
FROM
-
-
sales.customers
-
-
WHERE
-
-
city
=
'New York'
-
-
)
-
-
ORDER
BY
-
-
order_date
DESC;
2.SQL Server 嵌套子查询
子查询可以嵌套在另一个子查询中,最多支持嵌套 32 个。
例:查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;
-
select
distinct sname , a.sno
-
-
from sc a
-
-
inner
join student b
on a.sno
= b.sno
-
-
where a.sno
<>
's001'
and a.cno
in(
-
-
select cno
-
-
from sc c
-
-
where a.cno
= c.cno
and c.sno
=
's001'
-
-
)
这个例子中,我们要查询学号和姓名,因为学号和姓名不在同一个表,所有我们要把他们连接起来。
我们要查询是与学号为 ‘s001’ 选课至少有一门相同的同学,所以名单里面不包含 ‘s001’。在数据库里的不等于的写法 ‘ < > ’是两个尖括号.查询学号不等于 ‘s001’且 a.课程号 in(是) , a.课程号与c表里面的数据进行对比后,返回数据。
3. SQL Server相关子查询
相关子查询是使用外部查询的值的[子查询]。 换句话说,它取决于外部查询的值。 由于这种依赖性,相关子查询不能作为简单子查询独立执行。
此外,对外部查询评估的每一行重复执行一次相关子查询。
相关子查询也称为重复子查询。
以下示例查找价格等于其类别的最高价格的产品。
-
--- 相关子查询
-
-
SELECT
-
-
product_name,
-
-
list_price,
-
-
category_id
-
-
FROM
-
-
production.products p1
-
-
WHERE
-
-
list_price
IN (
-
-
SELECT
-
-
MAX (p2.list_price)
-
-
FROM
-
-
production.products p2
-
-
WHERE
-
-
p2.category_id
= p1.category_id
-
-
GROUP
BY
-
-
p2.category_id
-
-
)
-
-
ORDER
BY
-
-
category_id,
-
-
product_name;
-
-- 子查询写法
-
-
SELECT
-
-
p1.product_id,p1.product_name,p1.category_id,p1.list_price
-
-
FROM
-
-
production.products p1
-
-
INNER
JOIN (
-
-
SELECT
-
-
category_id,
-
-
max(list_price) max_price
-
-
FROM
-
-
production.products
-
-
GROUP
BY
-
-
category_id
-
-
) p2
ON p1.category_id
= p2.category_id
-
-
AND p1.list_price
= p2.max_price;