mysql笔记(11)
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql笔记(11)相关的知识,希望对你有一定的参考价值。
寻找订购物品TNT2的所有客户,原本可以通过三个select查询得到。
SELECT cust_name ,cust_contact
FROM customers c
WHERE cust_id IN (10001,10004);
SELECT cust_id
FROM orders o
WHERE order_num IN (20005,20007);
SELECT order_num
FROM orderitems o
WHERE prod_id = 'TNT2';
可以利用select子查询,利用mysql执行语句的由内向外的顺序执行。
-- 找到订购TNT2的所有用户
SELECT cust_name ,cust_contact
FROM customers c
WHERE cust_id IN (SELECT cust_id
FROM orders o
WHERE order_num IN (SELECT order_num
FROM orderitems o
WHERE prod_id = 'TNT2'));
虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。
当然也可以配合计算字段使用。
假如需要显示customers表中每个客户的订单总数。其中 o 和c 是表的缩写,方便引用。
对单个用户查询其订单总数简单,但是要对所有的用户查询其订单总数,就要用到子查询,将其作为一列(计算字段)显示,其中where的条件就是两个表的cust_id相同,注意需要引用表来区分同名的cust_id。子查询中的WHERE子句与前面使用的WHERE子句稍有不同,因为它使用了完全限定列名,这种称为相关子查询
SELECT cust_name ,cust_state ,
(SELECT count(*)
FROM orders o
WHERE o.cust_id = c.cust_id) AS orders
FROM customers c
ORDER BY cust_name
总结:子查询最常见的使用是在WHERE子句的IN操作符中,以及用来填充计算列
以上是关于mysql笔记(11)的主要内容,如果未能解决你的问题,请参考以下文章