本次内容共分为十篇,每次五题
前言
你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。
《SQL 必知必会》作为麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法。涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容。实例丰富,方便查阅,可以说作为一个 CRUD BOY/GIRL 必读书目。
想着正好给它刷一遍,然后将自己刷题的一些想法总结下,于是有了今天这篇文章,希望能给需要的小伙伴一点点帮助
SQL1 从 Customers 表中检索所有的 I
描述
现有表Customers如下:
cust_id |
---|
A |
B |
C |
问题
编写 SQL 语句,从 Customers 表中检索所有的 cust_id。
示例答案
返回 cust_id 列的内容
cust_id |
---|
A |
B |
C |
示例
1 2 3 4 5 6 7 |
|
解答
考察最简单的查询语句,因为 Customers
表中仅有 cust_id
一列,所以我们可以使用以下两种解答方式。
- 第一种方式,选择特定列进行输出,这也是我们在工作中更加推荐使用的一种方式,将需要输出的列名全部描述出来。
1 |
|
- 第二种方式,使用
*
对表中所有列进行输出,因为Customers
表中仅有一列,所以可以使用该方式。但在日常工作中,就算查询结果列中包含了数据库表的所有字段,也不要直接使用*
.
1 |
|
SQL2 检索并列出已订购产品的清单
描述
表OrderItems含有非空的列prod_id代表商品id,包含了所有已订购的商品(有些已被订购多次)。
prod_id |
---|
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
问题
编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
示例
1 2 3 4 5 |
|
解答
要对结果去重,可以使用 DISTINCT
关键字。使用时,在后边跟上需要去重的字段即可保证这些去重字段的查询结果不重复。
1 |
|
此外还可以使用 GROUP BY
关键字,改关键字支持在去重的同时,同步返回其他字段的信息。
1 |
|
SQL3 检索所有列
描述
现在有 Customers 表(表中含有列 cust_id 代表客户 id,cust_name 代表客户姓名) 。
cust_id | cust_name |
---|---|
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
问题
需要编写 SQL语句,检索所有列。
示例结果
返回所有列 cust_id 和 cust_name。
cust_id | cust_name |
---|---|
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
示例
1 2 3 4 5 6 |
|
解答
类似于第一题,最简单的查询语句,只不过相比第一题多了一列,所以同样可以使用两种方式。
- 使用
*
表示所有列。
1 |
|
- 将需要打印出的列详细列出。
1 |
|
SQL4 检索顾客名称并且排序
描述
有表 Customers,cust_id 代表客户 id,cust_name 代表客户姓名。
cust_id | cust_name |
---|---|
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
问题
从 Customers 中检索所有的顾客名称(cust_name),并按从 Z 到 A 的顺序显示结果。
示例结果
返回客户姓名 cust_name
cust_name |
---|
tony |
tom |
lee |
hex |
ben |
andy |
an |
示例
1 2 3 4 5 6 |
|
解答
要对数据库中的数据进行排序,需要使用关键字 ORDER BY
。此外,默认情况下,SQL 中列的结果默认是正序排列的,即实际情况下以下语句执行结果是一样的。
1 |
|
1 |
|
而要对查询结果逆序输出,则需要用到 DESC
关键字,表示逆序输出。
1 |
|
SQL5 对顾客ID和日期排序
描述
有 Orders 表
cust_id | order_num | order_date |
---|---|---|
andy | aaaa | 2021-01-01 00:00:00 |
andy | bbbb | 2021-01-01 12:00:00 |
bob | cccc | 2021-01-10 12:00:00 |
dick | dddd | 2021-01-11 00:00:00 |
问题
编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号(order_num),并先按顾客 ID 对结果进行排序,再按订单日期倒序排列。
示例答案
返回 2 列,cust_id 和 order_num
cust_id | order_num |
---|---|
andy | bbbb |
andy | aaaa |
bob | cccc |
dick | dddd |
示例解析
首先根据 cust_id 进行排列,andy 在 bob 和 dick 前,再根据 order_date 进行排列,订单号 bbbb 的订单时间是 “2021-01-01 12:00:00” 大于订单号 aaaa 的时间 “2021-01-01 00:00:00”
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
要对列进行排序,则需要使用 ORDER BY
关键字,此外就是正序和倒序输出。
ASC
:正序输出,也是默认输出的情况。DESC
:倒序输出。
1 |
|
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116121.html