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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。