本次内容共分为十篇,每次五题,其它篇章在主页Mysql专栏中
前言
你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。
《SQL 必知必会》作为麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法。涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容。实例丰富,方便查阅,可以说作为一个 CRUD BOY/GIRL 必读书目。
想着正好给它刷一遍,然后将自己刷题的一些想法总结下,于是有了今天这篇文章,希望能给需要的小伙伴一点点帮助
SQL16 检索产品名称和描述(一)
描述
Products表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
问题
编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含 toy 一词的产品名称
示例结果
返回产品名称和产品描述
prod_name | prod_desc |
---|---|
c0019 | gucci toy |
d0019 | lego toy |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
模糊查询,主要产品描述中含有 toy
一词,就需要返回这时候需要用到模糊查询关键字 LIKE
然后是通配符,题目中并没有明确说明 toy
前后包含多少个字符,所以用 %
。
1 |
|
SQL17 检索产品名称和描述(二)
描述
Products 表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
问题
编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现 toy 一词的产品,最后按”产品名称“对结果进行排序。
示例结果
返回产品名称和产品描述
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
这题就是 16 题的反面,那我们只要对 16 的查询语句进行取反即可,此时添加一个关键字 NOT
即可。此外,还需要按“产品名称”对结果排序,使用关键字 ORDER BY
即可。但是需要注意 WHERE
和 ORDER BY
关键字的先后顺序。
1 |
|
SQL18 检索产品名称和描述(三)
描述
Products 表
问题
编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现 toy 和 carrots 的产品。有好几种方法可以执行此操作,但对于这个挑战题,请使用 AND 和两个 LIKE 比较。
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego carrots toy |
示例结果
返回产品名称和产品描述
prod_name | prod_desc |
---|---|
d0019 | lego carrots toy |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
题目中明确要求使用 LIKE
和 AND
关键字,那么可以将条件拆分为两个模糊查询,一个是描述中含有 toy
的产品,一个是描述中含有 carrots
的产品,然后利用关键字 AND
将两个条件串联就可以了。
1 |
|
SQL19 检索产品名称和描述(四)
描述
Products 表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy carrots |
问题
编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现 toy 和 carrots 的产品。提示:只需要用带有三个 % 符号的 LIKE 即可。
示例结果
返回产品名称和产品描述
prod_name | prod_desc |
---|---|
d0019 | lego toy carrots |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
题目中已经进行了提示,要查询产品描述中以先后顺序同时出现 toy
和 carrots
的产品,但没有说他们两者之间存在的字符以及 toy
前面和 carrots
后边所包含的字符,那么需要使用通配符 %
,得到最终的结果 %toy%carrots%
。
1 |
|
SQL20 别名
描述
别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。有表 Vendors 代表供应商信息,vend_id 供应商 id、vend_name 供应商名称、vend_address 供应商地址、vend_city 供应商城市。
vend_id | vend_name | vend_address | vend_city |
---|---|---|---|
a001 | tencent cloud | address1 | shenzhen |
a002 | huawei cloud | address2 | dongguan |
a003 | aliyun cloud | address3 | hangzhou |
a003 | netease cloud | address4 | guangzhou |
问题
编写 SQL 语句,从 Vendors 表中检索 vend_id、vend_name、vend_address 和 vend_city,将 vend_name 重命名为 vname,将 vend_city 重命名为 vcity,将 vend_address 重命名为 vaddress,按供应商名称对结果进行升序排序。
示例结果
返回 vend_id 供应商 id、vname 供应商名称、vaddress 供应商地址、vcity 供应商城市。
vend_id | vname | vaddress | vcity |
---|---|---|---|
a003 | aliyun cloud | address3 | hangzhou |
a002 | huawei cloud | address2 | dongguan |
a003 | netease cloud | address4 | guangzhou |
a001 | tencent cloud | address1 | shenzhen |
示例
1 2 3 4 5 6 7 8 9 10 |
|
解答
SQL 中,要对列取别名,需要用到关键字 AS
,使用格式如下:
1 |
|
通过对题目中的三个字段取别名,然后使用 ORDER BY
关键字,按照供应商名称列对结果进行升序排序。
1 |
|
此外,AS
其实可要可不要,你也可以写成以下的方式,在列名之后跟上别名即可,实现的效果和上面语句一致。
1 |
|