1.利用子查询进行过滤
customers表 客户表
orders表 订单表 和客户表关系是 1个客户有多个订单
orderitems表 订单里具体的物品 和订单表关系是 1个订单有多个物品
需求:列出订单物品里有RGAN01的所有客户的名字
1.从订单物品表里查出有RGAD01物品的所有订单号
select order_num from orderitems where prod_id='RGAN01'
结果
2.从订单表里查出订单号为20007和20008的客户id
select cust_id from orders where order_num in(20007,20008)
结果
3.从客户表中查出用户id为1000000004和1000000005客户的名字
select cust_name from customers where cust_id in(1000000004,1000000005)
结果
子查询总是从内到外处理
关联查询
select a.cust_name from customers a join orders b on a.cust_id=b.cust_id join orderitems c on b.order_num=c.order_num where c.prod_id='RGAN01'
2.做为计算字段使用子查询
如下 orders 订单表
需求:查询用户id为1000000001的订单数量
select count(*) from orders where cust_id=1000000001
需求:查询用户id为1000000002的订单数量
select count(*) from orders where cust_id=1000000002
那么,现在需求是
查询每个客户的订单总数
select cust_name,(select count(*) from orders where orders.cust_id=customers.cust_id) from customers
注意客户表中两个人同名,但地址是不同的,不是同一个人
用户表里有5个用户,因此查询每个用户的时候,该子查询都会执行5次,当子查询条件不匹配时候返回是0,条件成立+1