前言
❤欢迎大家到我的文章里呀❤
希望你们在我的文章当中能有所收获,非常感谢!!!SLogan:利用有限的时间,撸起袖子加油干!
知识点回顾
where—过滤过滤指定的行
having–过滤分组,与group by连用
一、使用子查询
【SQL91】返回购买价格为10美元或以上产品的顾客列表
解题思路:
这是一道简单的子查询题目,需要注意的就是此类题目需要考虑到同一顾客可能会多次购买十美元及以上的商品,这样的话就需要用DISTINCT去重。本题没有这种情况。
还需要注意的是:子查询的格式。我好久没碰到都有点生疏了。
代码如下:
SELECT cust_id
FROM Orders
WHERE order_num IN (
SELECT order_num
FROM OrderItems
WHERE item_price>=10
)
结果:
【SQL92】确定哪些订单购买了 prod_id 为 BR01 的产品(一)
解题思路:
这道题其实有很多解法,比如我们首先能够想到的就是“左连接”将两张表连接起来,顺便也是对这个知识点的复习,我也把正确代码粘贴下来,供大家学习参考。
代码如下:
左连接的正确代码:
SELECT cust_id,order_date
FROM Orders AS A
LEFT JOIN OrderItems AS B
ON A.order_num=B.order_num
WHERE B.prod_id='BR01'
ORDER BY order_date ASC
子查询的正确代码:
SELECT cust_id,order_date
FROM Orders
WHERE order_num IN (
SELECT order_num
FROM OrderItems
WHERE prod_id='BR01'
)
ORDER BY order_date ASC
结果:
【SQL93】返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件(一)
解题思路:
这道题我采用的是左连接的方法,将三张表格两两连接,再用WHERE子句,找出满足条件的prod_id即可。
代码如下:
SELECT cust_email
FROM Customers AS C
LEFT JOIN Orders AS B
ON C.cust_id=B.cust_id
LEFT JOIN OrderItems AS A
ON A.order_num=B.order_num
WHERE prod_id ='BR01'
结果:
【SQL94】返回每个顾客不同订单的总金额
解题思路:
这道题使用的是表之间的连接,具体可以看代码,没有很复杂的东西,分组,排序,看清题目就可以了。
代码如下:
SELECT cust_id,SUM(item_price*quantity) total_ordered
FROM OrderItems AS A,Orders AS B
WHERE A.order_num = B.order_num
GROUP BY cust_id
ORDER BY total_ordered DESC
结果:
【SQL95】 从 Products 表中检索所有的产品名称以及对应的销售总数
解题思路:
这道题和上一题是一样的,只不过我犯了一个错误,经常会把最后那一行的GROUP BY忘记,刚刚去搜了以下GROUP BY 的用法。
GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。
代码如下:
SELECT prod_name,SUM(quantity) AS quant_sold
FROM Products AS A,OrderItems AS B
WHERE A.prod_id=B.prod_id
GROUP BY prod_name
结果:
总结
今天做题是有点磕磕绊绊的,问题都出在细节上,不过还是搞明白啦!今天下午还追了好几集电视机,呜呜呜罪恶感好强!但是不会阻挡我发博客的脚步!!
知识这种东西真的不能自己闭门造车,还是需要和大家一起思考,才能够学的更全面!
不懂的问题要及时搞明白,不能得过且过啦!!大家一起加油!
感谢您宝贵的阅读,关注和点赞噢!❤