第十四章-使用子查询

14.1子查询

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

14.2利用子查询进行过滤

输入

SELECT cust_name,cust_contact FROM customers 
WHERE cust_id IN(SELECT cust_id
                FROM orders
                WHERE order_num IN(SELECT order_num
                                  FROM orderitems
                                  WHERE prod_id = 'TNT2'
                                  )
                );

输出

+----------------+--------------+
| cust_name      | cust_contact |
+----------------+--------------+
| Coyote Inc.    | Y Lee        |
| Yosemite Place | Y Sam        |
+----------------+--------------+

分析

为了执行上述SELECT语句;MySQL实际上必须执行3条SELECT语句,最里边的子查询返回订单号列表,此列表用于其外面的子查询的WHERE子句。外面的子查询返回客户ID列表,此客户ID列表用于最外层的WHERE子句,最外层的查询确实返回所需的数据。

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

通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

子查询往往性能不佳

14.3作为计算字段使用子查询

例:

假如需要显示customers 表中每个客户的订单总数。订单与相应的客户ID存储在orders表中。

SELECT cust_ name ,
      cust_ state ,
    (SELECT COUNT(*) 
      FROM- orders
     WHERE orders.cust_ id = customers.cust_ id) AS orders
FROM cus tomers
ORDER BY cust_ name;

如上图那样,涉及外部查询的子查询,我们称之为相关子查询。

建议:逐渐增加子查询来建立查询,可以有效地测试和调试查询。

14.4小结

本章学习了什么是子查询以及如何使用它们。子查询最常见的使用 是在WHERE子句的IN操作符中,以及用来填充计算列。我们举了这两种操 作类型的例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值