本次内容共分为十篇,每次五题
前言
你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。
《SQL 必知必会》作为麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法。涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容。实例丰富,方便查阅,可以说作为一个 CRUD BOY/GIRL 必读书目。
想着正好给它刷一遍,然后将自己刷题的一些想法总结下,于是有了今天这篇文章,希望能给需要的小伙伴一点点帮助
SQL6 按照数量和价格排序
描述
假设有一个 OrderItems 表
quantity | item_price |
---|---|
1 | 100 |
10 | 1003 |
2 | 500 |
问题
编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。
示例答案
返回 quantity 和 item_price
示例
1 2 3 4 5 6 7 8 |
|
解答
同样是查询语句,要对查询结果进行排序,则需要使用 ORDER BY
关键字,最后则是需要注意是正序还是倒序,题目中由多到少和由高到低都是属于倒序,所以需要使用关键字 DESC
。
1 |
|
SQL7 检查SQL语句
描述
有 Vendors 表
vend_name |
---|
海底捞 |
小龙坎 |
大龙燚 |
问题
下面的 SQL 语句有问题吗?尝试将它改正确,使之能够正确运行,并且返回结果根据 vend_name 逆序排列
1 2 3 |
|
示例展示
返回 vend_name
vend_name |
---|
海底捞 |
小龙坎 |
大龙燚 |
示例
1 2 3 4 5 6 7 |
|
解答
1 |
|
主要存在两处错误,首先是选取需要展示的列 vend_name
后,后面并没有跟上需要展示的其他列,所以此处多了一个 ,
。另外,对选取列进行排序使用的关键字是 ORDER BY
,而题目中只是给出了 ORDER
,忘记了 BY
,所以会导致查询结果错误。针对这两处错误改正后,得到的正确的语句如下所示。
1 |
|
SQL8 返回固定价格的产品
描述
有表 Products
prod_id | prod_name | prod_price |
---|---|---|
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0018 | gucci t-shirts | 1000 |
问题
从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9.49 美元的产品。
示例结果
返回 prod_id 和 prod_name
prod_id | prod_name |
---|---|
a0018 | sockets |
示例
1 2 3 4 5 6 7 8 9 |
|
解答
查询符合指定条件的数据,可以使用关键字 WHERE
对条件进行限制,然后就是对条件的实现,这里可以使用两种方式。
第一种,直接利用 =
,既然条件是需要价格为 9.49
美元的产品,则我们将价格列设置为 prod_price = 9.49
即可。
1 |
|
第二种,除开 =
之外,我们也可以使用 in
,表示价格只要在指定的数据之中,我们将价格列设置为 in (9.49)
即可,但是此时要注意不要忽略 ()
,否则语句会报错。
1 |
|
SQL9 返回更高价格的产品
描述
Products 表
prod_id | prod_name | prod_price |
---|---|---|
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0019 | gucci t-shirts | 1000 |
问题
编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。
示例答案
返回 prod_id 商品 id 和 prod_name 商品名称
prod_id | prod_name |
---|---|
a0018 | sockets |
a0019 | iphone13 |
b0019 | gucci t-shirts |
示例
1 2 3 4 5 6 7 8 9 |
|
解答
条件查询语句,查询格式:
SELECT [列名] FROM [表名] WHERE 判断条件 …
既然判断条件是要产品价格不低于 9 美元,则产品需要大于等于 9 美元,可以将产品价格设置为 prod_price >= 9
即可。
1 |
|
此外,我们还可以将 >=
拆分为两个条件,一个是 prod_price > 9
,而另一个则是 prod_price = 9
,然后满足任一条件即可,则利用关键字 OR
将两个条件进行连接。
1 |
|
SQL10 返回产品并且按照价格排序
描述
有 Products 表
prod_id | prod_name | prod_price |
---|---|---|
a0011 | egg | 3 |
a0019 | sockets | 4 |
b0019 | coffee | 15 |
问题
编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序
示例结果
返回商品名称 prod_name 和商品价格 prod_price
prod_name | prod_price |
---|---|
egg | 3 |
sockets | 4 |
注:不需要考虑商品价格相同的情况
示例
1 2 3 4 5 6 7 8 9 |
|
解答
条件查询,通过将条件拆分为 prod_price >= 3
和 prod_price <= 6
两个条件,然后利用关键字 AND
将两个条件串联起来,同时满足两个条件的数据则进行输出。然后要对价格进行排序,则可以使用关键字 ORDER BY
。
1 |
|
除开上述将两个条件拆分开然后利用关键字 AND
串联起来之外,其实 SQL 还提供了关键字 BETWEEN … AND …
,可以将满足介于两者之间的数进行筛选输出。
1 |
|