本次内容共分为十篇,每次五题,其它篇章都在我主页的Mysql专栏中!
前言
你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。
《SQL 必知必会》作为麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法。涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容。实例丰富,方便查阅,可以说作为一个 CRUD BOY/GIRL 必读书目。
想着正好给它刷一遍,然后将自己刷题的一些想法总结下,于是有了今天这篇文章,希望能给需要的小伙伴一点点帮助
SQL11 返回更多的产品
描述
OrderItems 表含有:订单号 order_num,quantity 产品数量
order_num | quantity |
---|---|
a1 | 105 |
a2 | 1100 |
a2 | 200 |
a4 | 1121 |
a5 | 10 |
a2 | 19 |
a7 | 5 |
问题
从 OrderItems 表中检索出所有不同且不重复的订单号(order_num),其中每个订单都要包含 100 个或更多的产品。
示例结果
返回订单号列 order_num
order_num |
---|
a1 |
a2 |
a4 |
示例
1 2 3 4 5 6 |
|
解答
要筛选指定列中不重复的数据,则需要使用关键字 DISTINCT
。此外,要筛选出满足指定条件的数据,则需要关键字 WHERE
,然后根据题意,可以将条件写到一起,也可以将条件进行拆分后用关键字 OR
并联。
1 |
|
1 |
|
SQL12 检索供应商名称
描述
Vendors 表有字段供应商名称(vend_name)、供应商国家(vend_country)、供应商州(vend_state)
vend_name | vend_country | vend_state |
---|---|---|
apple | USA | CA |
vivo | CNA | shenzhen |
huawei | CNA | xian |
问题
编写 SQL 语句,从 Vendors 表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(这需要按国家[USA]和州[CA]进行过滤,没准其他国家也存在一个 CA)
示例答案
返回供应商名称 vend_name
vend_name |
---|
apple |
示例
1 2 3 4 5 6 7 8 9 |
|
解答
既然要筛选出加利福利亚州的提供商,则首要条件是满足 vend_state = 'CA'
。另外,除开美国有加利福利亚州之外,有可能其他国家也有加利福利亚州,所以需要对国家也进行限定,设置条件为 vend_country = 'USA'
。然后用关键字 AND
将条件串联,满足这两个条件的数据则进行输出。
1 |
|
SQL13 检索并列出已订购产品的清单
描述
OrderItems 表包含了所有已订购的产品(有些已被订购多次)。
prod_id | order_num | quantity |
---|---|---|
BR01 | a1 | 105 |
BR02 | a2 | 1100 |
BR02 | a2 | 200 |
BR03 | a4 | 1121 |
BR017 | a5 | 10 |
BR02 | a2 | 19 |
BR017 | a7 | 5 |
问题
编写 SQL 语句,查找所有订购了数量至少 100 个的 BR01、BR02 或 BR03 的订单。你需要返回 OrderItems 表的订单号(order_num)、产品 ID(prod_id)和数量(quantity),并按产品 ID 和数量进行过滤。
示例答案
返回商品 id prod_id、订单 order_num、数量 quantity。
order_num | prod_id | quantity |
---|---|---|
a1 | BR01 | 105 |
a2 | BR02 | 1100 |
a2 | BR02 | 200 |
a4 | BR03 | 1121 |
示例解析
返回的结果中,数量满足大于等于 100,且满足 prod_id 是 "BR01",“BR02”,“BR03" 中的任意一个。
示例
1 2 3 4 5 6 7 8 |
|
解答
多条件查询,将两个条件进行拆分,然后将两个查询条件进行串联即可。
数量满足大于等于 100,则设置为 quantyty >= 100
。
产品 id 满足 "BR01",“BR02”,“BR03” 中的任意一个,则使用关键字 in
。
1 |
|
SQL14 返回所有价格在 3 美元到 6 美元之间的产品的名称和价格
描述
有表 Products
prod_id | prod_name | prod_price |
---|---|---|
a0011 | egg | 3 |
a0019 | sockets | 4 |
b0019 | coffee | 15 |
问题
编写 SQL 语句,返回所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),使用 AND 操作符,然后按价格对结果进行升序排序
示例结果
返回商品名称 prod_name 和商品价格 prod_price
prod_name | prod_price |
---|---|
egg | 3 |
sockets | 4 |
注:不需要考虑价格相同时的排序问题
示例
1 2 3 4 5 6 7 8 9 |
|
解答
两个条件,首先是价格介于 3 到 6 美元,则可以使用关键字 BETWEEN … AND …
。另外,按价格升序排序,则使用关键字 ORDER BY
。
1 |
|
题目中指定需要使用关键字 AND
,则需要将价格条件替换成 prod_price >= 3
和 prod_price <= 6
两个条件,然后将其串联。
1 |
|
SQL15 纠错2
描述
供应商表 Vendors 有字段供应商名称 vend_name、供应商国家 vend_country、供应商省份 vend_state
vend_name | vend_country | vend_state |
---|---|---|
apple | USA | CA |
vivo | CNA | shenzhen |
huawei | CNA | xian |
问题
修改正确下面 sql,使之正确返回
1 2 3 4 |
|
示例结果
结果返回 vend_name
vend_name |
---|
apple |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
主要是一处错误,搞错了关键字 WHERE
和 ORDER BY
的先后顺序,正确的 SQL 语句格式为:
1 |
|
1 |
|