不知道 MySQL 咋学?刷完牛客这 50 道题就够了!(第四篇)

本文通过一系列SQL练习题,介绍了如何从Products表中根据不同的条件检索产品名称和描述。从简单的产品描述中包含特定词汇到更复杂的使用AND和LIKE操作符同时查找多个条件,再到使用别名重命名列。这些例子涵盖了基本的模糊查询、条件筛选和排序,以及列的别名设置,适合SQL初学者巩固基础知识。
摘要由CSDN通过智能技术生成

本次内容共分为十篇,每次五题,其它篇章在主页Mysql专栏中

前言

你是否还在烦恼 SQL 该从何学起,或者学了 SQL 想找个地方练练手?好巧不巧,最近在工作之余登上牛客,发现了牛客不知道啥时候上线了SQL 必知必会的练习题。

《SQL 必知必会》作为麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法。涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容。实例丰富,方便查阅,可以说作为一个 CRUD BOY/GIRL 必读书目。

想着正好给它刷一遍,然后将自己刷题的一些想法总结下,于是有了今天这篇文章,希望能给需要的小伙伴一点点帮助

 

SQL16 检索产品名称和描述(一)

描述

Products表

prod_nameprod_desc
a0011usb
a0019iphone13
b0019gucci t-shirts
c0019gucci toy
d0019lego toy

问题

编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含 toy 一词的产品名称

示例结果

返回产品名称和产品描述

prod_nameprod_desc
c0019gucci toy
d0019lego toy

示例

1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

`prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',

`prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'

);

INSERT INTO `Products` VALUES ('a0011','usb'),

('a0019','iphone13'),

('b0019','gucci t-shirts'),

('c0019','gucci toy'),

('d0019','lego toy');

解答

模糊查询,主要产品描述中含有 toy 一词,就需要返回这时候需要用到模糊查询关键字 LIKE 然后是通配符,题目中并没有明确说明 toy 前后包含多少个字符,所以用 %

1

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%'

 

SQL17 检索产品名称和描述(二)

描述

Products 表

prod_nameprod_desc
a0011usb
a0019iphone13
b0019gucci t-shirts
c0019gucci toy
d0019lego toy

问题

编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现 toy 一词的产品,最后按”产品名称“对结果进行排序

示例结果

返回产品名称和产品描述

prod_nameprod_desc
a0011usb
a0019iphone13
b0019gucci t-shirts

示例

1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

`prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',

`prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'

);

INSERT INTO `Products` VALUES ('a0011','usb'),

('a0019','iphone13'),

('b0019','gucci t-shirts'),

('c0019','gucci toy'),

('d0019','lego toy');

解答

这题就是 16 题的反面,那我们只要对 16 的查询语句进行取反即可,此时添加一个关键字 NOT 即可。此外,还需要按“产品名称”对结果排序,使用关键字 ORDER BY 即可。但是需要注意 WHEREORDER BY 关键字的先后顺序。

1

SELECT prod_name, prod_desc FROM Products WHERE prod_desc NOT LIKE '%toy%' ORDER BY prod_name;

 

SQL18 检索产品名称和描述(三)

描述

Products 表

问题

编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现 toy 和 carrots 的产品。有好几种方法可以执行此操作,但对于这个挑战题,请使用 AND 和两个 LIKE 比较。

prod_nameprod_desc
a0011usb
a0019iphone13
b0019gucci t-shirts
c0019gucci toy
d0019lego carrots toy

示例结果

返回产品名称和产品描述

prod_nameprod_desc
d0019lego carrots toy

示例

1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

`prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',

`prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'

);

INSERT INTO `Products` VALUES ('a0011','usb'),

('a0019','iphone13'),

('b0019','gucci t-shirts'),

('c0019','gucci toy'),

('d0019','lego carrots toy');

解答

题目中明确要求使用 LIKEAND 关键字,那么可以将条件拆分为两个模糊查询,一个是描述中含有 toy 的产品,一个是描述中含有 carrots 的产品,然后利用关键字 AND 将两个条件串联就可以了。

1

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';

 

SQL19 检索产品名称和描述(四)

描述

Products 表

prod_nameprod_desc
a0011usb
a0019iphone13
b0019gucci t-shirts
c0019gucci toy
d0019lego toy carrots

问题

编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现 toy 和 carrots 的产品。提示:只需要用带有三个 % 符号的 LIKE 即可。

示例结果

返回产品名称和产品描述

prod_nameprod_desc
d0019lego toy carrots

示例

1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

`prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',

`prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'

);

INSERT INTO `Products` VALUES ('a0011','usb'),

('a0019','iphone13'),

('b0019','gucci t-shirts'),

('c0019','gucci toy'),

('d0019','lego toy carrots ');

解答

题目中已经进行了提示,要查询产品描述中以先后顺序同时出现 toycarrots 的产品,但没有说他们两者之间存在的字符以及 toy 前面和 carrots 后边所包含的字符,那么需要使用通配符 % ,得到最终的结果 %toy%carrots%

1

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%carrots%';

 

SQL20 别名 

描述

别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。有表 Vendors 代表供应商信息,vend_id 供应商 id、vend_name 供应商名称、vend_address 供应商地址、vend_city 供应商城市。

vend_idvend_namevend_addressvend_city
a001tencent cloudaddress1shenzhen
a002huawei cloudaddress2dongguan
a003aliyun cloudaddress3hangzhou
a003netease cloudaddress4guangzhou

问题

编写 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_idvnamevaddressvcity
a003aliyun cloudaddress3hangzhou
a002huawei cloudaddress2dongguan
a003netease cloudaddress4guangzhou
a001tencent cloudaddress1shenzhen

示例

1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `Vendors`;

CREATE TABLE IF NOT EXISTS `Vendors` (

  `vend_id` VARCHAR(255) NOT NULL COMMENT '供应商id',

  `vend_name` VARCHAR(255) NOT NULL COMMENT '供应商名称',

  `vend_address` VARCHAR(255) NOT NULL COMMENT '供应商地址',

  `vend_city` VARCHAR(255) NOT NULL COMMENT '供应商城市'

);

INSERT INTO `Vendors` VALUES ('a001','tencent cloud','address1','shenzhen'),

('a002','huawei cloud','address2','dongguan'),

('a003','aliyun cloud','address3','alibaba');

解答

SQL 中,要对列取别名,需要用到关键字 AS,使用格式如下:

1

列名 AS 别名

通过对题目中的三个字段取别名,然后使用 ORDER BY 关键字,按照供应商名称列对结果进行升序排序

1

SELECT vend_id, vend_name AS vname, vend_address AS vaddress, vend_city AS vcity FROM Vendors ORDER BY vend_name;

此外,AS 其实可要可不要,你也可以写成以下的方式,在列名之后跟上别名即可,实现的效果和上面语句一致。

1

SELECT vend_id, vend_name vname, vend_address vaddress, vend_city vcity FROM Vendors

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八岁讨厌Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值