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 |
示例
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
前后包含多少个字符,所以用 %
。
SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%'
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 |
示例
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
即可。但是需要注意 WHERE
和 ORDER BY
关键字的先后顺序。
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_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 |
示例
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');
解答
题目中明确要求使用 LIKE
和 AND
关键字,那么可以将条件拆分为两个模糊查询,一个是描述中含有 toy
的产品,一个是描述中含有 carrots
的产品,然后利用关键字 AND
将两个条件串联就可以了。
SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';
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 |
示例
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 ');
解答
题目中已经进行了提示,要查询产品描述中以先后顺序同时出现 toy
和 carrots
的产品,但没有说他们两者之间存在的字符以及 toy
前面和 carrots
后边所包含的字符,那么需要使用通配符 %
,得到最终的结果 %toy%carrots%
。
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_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 |
示例
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
,使用格式如下:
列名 AS 别名
通过对题目中的三个字段取别名,然后使用 ORDER BY
关键字,按照供应商名称列对结果进行升序排序。
SELECT vend_id, vend_name AS vname, vend_address AS vaddress, vend_city AS vcity FROM Vendors ORDER BY vend_name;
此外,AS
其实可要可不要,你也可以写成以下的方式,在列名之后跟上别名即可,实现的效果和上面语句一致。
SELECT vend_id, vend_name vname, vend_address vaddress, vend_city vcity FROM Vendors ORDER BY vend_name;
致谢
感谢牛客网提供的题目列表。