订单存储在两个表中。每个订单包含订单编号、客户ID、订单日期,在Orders表中存储为一行。各订单的物品存储在相关的OrdersItems表中。Orders表不存储顾客信息,只存储顾客ID。顾客的实际信息存储在Customers表中。
现在,假如需要列出订购物品RGAN01的所有顾客,步骤如下:
1、检索包含物品RGAN01的所有订单的编号。
SELECT order_numFROM orderitemsWHERE prod_id = 'RGAN01';
2、检索具有第一步列出的订单编号的所有顾客的ID。
SELECT cust_idFROM ordersWHERE order_num IN (20007, 20008);
现在,结合这两个查询,把第一个查询(返回订单号的第一个)作为子查询。
SELECT cust_idFROM ordersWHERE order_num IN (SELECT order_numFROM orderitemsWHERE prod_id = 'RGAN01');
可以看出结果是一样的。
在SELECT语句中,子查询总是由内向外执行的。
3、检索上一步返回的所有顾客ID的顾客信息。
SELECT cust_name,cust_contactFROM customersWHERE cust_id IN ('1000000004','1000000005');
子查询:
SELECT cust_name,cust_contactFROM customersWHERE cust_id IN (SELECT cust_idFROM ordersWHERE order_num IN (SELECT order_numFROM orderitemsWHERE prod_id = 'RGAN01'));