SQL Server2008 子查询

目录

SQL Server 子查询

SQL Server嵌套子查询

SQL Server相关子查询


  1. SQL Server 子查询

    子查询是嵌套在另一个语句(如:[SELECT],[INSERT],[UPDATE]或[DELETE])中的查询。

以下语句显示如何在 SELECT 语句的[WHERE]子句中使用子查询来查找位于纽约( New York )的客户的销

售订单:


  
  
  1. SELECT
  2.    order_id,
  3.    order_date,
  4.    customer_id
  5. FROM
  6.    sales.orders
  7. WHERE
  8.    customer_id IN (
  9.          SELECT
  10.            customer_id
  11.          FROM
  12.            sales.customers
  13.          WHERE
  14.            city = 'New York'
  15.     )
  16. ORDER BY
  17.    order_date DESC;

2.SQL Server 嵌套子查询

子查询可以嵌套在另一个子查询中,最多支持嵌套 32 个。

例:查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;


  
  
  1. select distinct sname , a.sno
  2. from sc a
  3. inner join student b on a.sno = b.sno
  4. where a.sno <> 's001' and a.cno in(
  5.   select cno
  6. from sc c
  7.   where a.cno = c.cno and c.sno = 's001'
  8. )

这个例子中,我们要查询学号和姓名,因为学号和姓名不在同一个表,所有我们要把他们连接起来。

我们要查询是与学号为 ‘s001’ 选课至少有一门相同的同学,所以名单里面不包含 ‘s001’。在数据库里的不等于的写法 ‘ < > ’是两个尖括号.查询学号不等于 ‘s001’且 a.课程号 in(是) , a.课程号与c表里面的数据进行对比后,返回数据。

3. SQL Server相关子查询

       相关子查询是使用外部查询的值的[子查询]。 换句话说,它取决于外部查询的值。 由于这种依赖性,相关子查询不能作为简单子查询独立执行。

        此外,对外部查询评估的每一行重复执行一次相关子查询。

        相关子查询也称为重复子查询。

以下示例查找价格等于其类别的最高价格的产品。


  
  
  1. --- 相关子查询
  2. SELECT
  3.    product_name,
  4.    list_price,
  5.    category_id
  6. FROM
  7.    production.products p1
  8. WHERE
  9.    list_price IN (
  10.          SELECT
  11.              MAX (p2.list_price)
  12.          FROM
  13.            production.products p2
  14.          WHERE
  15.            p2.category_id = p1.category_id
  16.          GROUP BY
  17.            p2.category_id
  18.     )
  19. ORDER BY
  20.    category_id,
  21.    product_name;


  
  
  1. -- 子查询写法
  2. SELECT
  3.  p1.product_id,p1.product_name,p1.category_id,p1.list_price
  4. FROM
  5.  production.products p1
  6.    INNER JOIN (
  7.      SELECT
  8.      category_id,
  9.        max(list_price) max_price
  10.      FROM
  11.      production.products
  12.      GROUP BY
  13.      category_id
  14.   ) p2 ON p1.category_id = p2.category_id
  15.    AND p1.list_price = p2.max_price;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值