【SQL】(十一):使用子查询

2020-07-14  本文已影响0人  Lottie2017

本系列为自己学习时的笔记及心得体会,转载请注明出处。

前提条件:数据库中有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了哦。

上一篇 下一篇

猜你喜欢

热点阅读