文章目录
前言
该系列教程,将会从实际问题出发,边干边学,逐步深入讲解SQL的各方面知识。
你需要完成所有的问题吗?绝对不是。介绍性的问题相当简单,所以你可以直接跳过到“中级问题”部分。如果你不是初学者,但不确定应该从哪里开始,请在“入门问题”部分看看问题和预期结果,并确保你理解这些概念。如果已经理解了这些概念,请开始阅读“中级问题”部分。
你想从这本书中复制代码并在你的服务器上运行?我建议你手动输入,而不是复制粘贴。为什么要去麻烦地重新打字呢?科学表明,打字的行为会在你的脑中留下更深刻的印象。当你只是复制和粘贴时,代码只是直接从你电脑里的一个窗口转到另一个窗口,而不会给你留下多少印象。但是当你把它打出来时,你必须集中精力,这非常有助于保留信息。
一旦你完成了所有的问题,将拥有一些在数据分析和高级Select语句使用方面非常有用的技能。当然,这并不是SQL的全部内容。还有修改数据(更新、插入、删除)、DDL(数据定义语言,即如何创建和修改数据库对象)、编程(如存储过程)和许多其他主题。
该系列教程中,只涉及到了使用Select语句检索数据的问题,这几乎是所有其他数据库主题的基础开端。
回顾
上篇文章👉《【SQL边干边学系列】02介绍性问题(续)》 讲了剩余的介绍性问题。这篇提高难度,开始讨论中级问题。
中级问题
20.类别,以及每个类别中的产品总数
对于这个问题,我们希望查看每个类别(Categories)中的产品(Products)的总数。结果按照产品总数降序排序。
-- 预期结果
CategoryName TotalProducts
--------------- -------------
Confections 13
Beverages 12
Condiments 12
Seafood 12
Dairy Products 10
Grains/Cereals 7
Meat/Poultry 6
Produce 5
(8 row(s) affected)
提示:要解决这个问题,需要使用join和group by。
一个很好的方法是,创建一个查询,它显示类别名(CategoryName)和与之关联的所有产品id(ProductIDs),而不进行分组。然后,在使用group by子句。
21.每个国家/城市的客户总数
在客户表(Customers)中,显示每个国家(Country)和城市(City)的客户总数(TotalCustomer)。
-- 预期结果
Country City TotalCustomer
--------------- --------------- -------------
UK London 6
Mexico México D.F. 5
Brazil Sao Paulo 4
Brazil Rio de Janeiro 3
...
Sweden Bräcke 1
Germany Brandenburg 1
Belgium Bruxelles 1
(69 row(s) affected)
提示:正如在Select子句中可以有多个字段一样,在 Group By 子句中也可以有多个字段。
22.需要重新订购的产品
我们的库存(Products)中有哪些产品需要重新订购?现在,只需使用 UnitsInStock 和 ReorderLevel 字段,其中 UnitsInStock 小于ReorderLevel ,忽略 UnitsOnOrder 和 Discontinued 字段。
并按产品ID(ProductID)排序结果。
-- 预期结果
ProductID ProductName U