SQL必知必会—使用子查询

《SQL必知必会》读书笔记

子查询:即嵌套在其他查询中的查询。

1.利用子查询进行过滤

现在,假如需要列出订购物品RGAN01的所有顾客,应该怎样检索?下面列出具体的步骤。
(1)检索包含物品RGAN01的所有订单的编号。
(2)检索具有前一步骤列出的订单编号对应的所有顾客的ID。
(3)检索前一步骤返回的所有顾客ID的顾客信息。

分步检索:

--1.检索物品RGAN01对应的订单的编号
SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'

order_num
20007
20008

--2.检索上一步订单编号对应的所有顾客的ID
SELECT cust_id
FROM Orders
WHERE order_num IN (20007,20008)

cust_id
10000000004
10000000005

--3.检索上一步顾客的ID对应的顾客信息
SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN ('1000000004','1000000005')

cust_name       cust_contact
Fun4All         Deise L. Stephens
The Toy Store   Kim Howard

整体检索(利用子查询):

SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN(
                SELECT cust_id 
                FROM Order
                WHERE order_num IN(
                                SELECT order_num 
                                FROM OrderItems
                                WHERE prod_id = 'RGAN01'
                                )
                )

注:在SELECT语句中,子查询总是从内向外处理。

注意:只能是单列
作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。

注意:子查询和性能
这里给出的代码有效,并且获得了所需的结果。但是,使用子查询并不总是执行这类数据检索的最有效方法。

2.作为计算字段使用子查询

使用子查询的另一方法是创建计算字段。

SELECT cust_name, cust_state,
             (SELECT COUNT(*)
                FROM orders
                WHERE orders.cust_id = customers.cust_id) AS orders

FROM customers
ORDER BY cust_name

这里写图片描述

orders是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个顾客执行一次。在此例中,该子查询执行了5次,因此检索出5个顾客。

3.总结

子查询常用于WHERE子句的IN操作符中,以及用来填充计算列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值