本系列为自己学习时的笔记及心得体会,转载请注明出处。
前提条件:数据库中有5个数据表。订单存储在两个表中。
orders表:每个订单包含订单编号,客户ID,订单日期,在Orders表中存储为一行。
orderItems表:各订单的物品存储在该表中。
customers表:存储顾客的实际信息。
vendors表:存储销售产品的供应商。
products表:存储商品信息。
1、利用子查询进行过滤
需求:需要列出订购物品 RGAN01的所有顾客。
那么,我们需要:
①在orderItem表获取购买商品RGAN01的订单号。
②在ORDERS表中通过订单号找到对应的顾客ID
③在Customers表中根据顾客ID找到对应的顾客名。
SQL为:
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='RGAN01'))
注意:作为子查询的SELECT语句只能查询单个列。
2、作为计算字段使用子查询
需求:需要显示Customers表中每个顾客的订单总数。
此时,执行的操作为:
①在customers表中根据顾客ID匹配顾客名。
②在orders表中检索出每个顾客的订单数
SQL如下:
select cust_name,cust_state,
(select count(*)
FROM orders
WHERE Orders.cust_id= Customers.cust_id) AS orders
FROM customers
ORDER BY cust_name
划重点:这里的count(*)用了WHERE子句就没有用GROUP BY了哦。
网友评论