题目
Table: Product
Table: Sales
编写一个SQL查询,报告2019年春季才售出的产品。即仅在2019-01-01至2019-03-31(含)之间出售的商品。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
解题思路
前置知识
between and
between 的英语意思是介于两者之间,在sql中的意思是两个值之间的数据范围。这些值可以是数值、文本或者日期。与and 一起使用
例句1:(筛选出一张表中以某个字段两个值之间的数据范围)
select * from tab1 where name between value1 and value2
(筛选出的条件中包括value1,但是不包括vaule2,也就是说并不是包括两个边界值,(sql server))
例句2:(筛选出一张表中以某个字段两个值之间的除外的数据范围,在条件中加not)
select * from tab1 where name not between value1 and value2
知道了between 的用法后,我们一起来看一下这道题
1.题目要求我们查询出2019年春季才售出的产品,也就是在2019-01-01至2019-03-31(含)之间出售的商品。我们可以对 product 和 sales 表进行左连接后,再用一个子查询解决这个问题。
2.首先我们对 product 表和 sales 表进行左连接,连接条件为 p.product_id = s.product_id 。
3.之后利用子查询筛选出日期在 2019-01-01 至 2019-03-31 的记录,返回筛选出的product_id 和 product_name即可。
代码实现
select distinct p.product_id, p.product_name
from product as p left join sales as s
on p.product_id = s.product_id
where s.product_id not in (select product_id from sales where sale_date not between '2019-01-01' and '2019-03-31')
测试结果