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. DROP TABLE IF EXISTS `Products`;
  2. CREATE TABLE IF NOT EXISTS `Products` (
  3. `prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',
  4. `prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'
  5. );
  6. INSERT INTO `Products` VALUES ('a0011','usb'),
  7. ('a0019','iphone13'),
  8. ('b0019','gucci t-shirts'),
  9. ('c0019','gucci toy'),
  10. ('d0019','lego toy');

解答

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

  1. 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

示例

  1. DROP TABLE IF EXISTS `Products`;
  2. CREATE TABLE IF NOT EXISTS `Products` (
  3. `prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',
  4. `prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'
  5. );
  6. INSERT INTO `Products` VALUES ('a0011','usb'),
  7. ('a0019','iphone13'),
  8. ('b0019','gucci t-shirts'),
  9. ('c0019','gucci toy'),
  10. ('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_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. DROP TABLE IF EXISTS `Products`;
  2. CREATE TABLE IF NOT EXISTS `Products` (
  3. `prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',
  4. `prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'
  5. );
  6. INSERT INTO `Products` VALUES ('a0011','usb'),
  7. ('a0019','iphone13'),
  8. ('b0019','gucci t-shirts'),
  9. ('c0019','gucci toy'),
  10. ('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_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. DROP TABLE IF EXISTS `Products`;
  2. CREATE TABLE IF NOT EXISTS `Products` (
  3. `prod_name` VARCHAR(255) NOT NULL COMMENT '产品 ID',
  4. `prod_desc` VARCHAR(255) NOT NULL COMMENT '产品名称'
  5. );
  6. INSERT INTO `Products` VALUES ('a0011','usb'),
  7. ('a0019','iphone13'),
  8. ('b0019','gucci t-shirts'),
  9. ('c0019','gucci toy'),
  10. ('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_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. DROP TABLE IF EXISTS `Vendors`;
  2. CREATE TABLE IF NOT EXISTS `Vendors` (
  3. `vend_id` VARCHAR(255) NOT NULL COMMENT '供应商id',
  4. `vend_name` VARCHAR(255) NOT NULL COMMENT '供应商名称',
  5. `vend_address` VARCHAR(255) NOT NULL COMMENT '供应商地址',
  6. `vend_city` VARCHAR(255) NOT NULL COMMENT '供应商城市'
  7. );
  8. INSERT INTO `Vendors` VALUES ('a001','tencent cloud','address1','shenzhen'),
  9. ('a002','huawei cloud','address2','dongguan'),
  10. ('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 ORDER BY vend_name;

致谢

感谢牛客网提供的题目列表。