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

文章介绍了如何使用SQL查询Vendors表中供应商的vend_id及其在Products表中的对应产品数量,包括使用LEFTJOIN和COUNT()函数,以及如何结合SELECT语句满足特定筛选条件。同时提及了Spring框架技术和面试技巧的重要性。
摘要由CSDN通过智能技术生成

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

SQL46 列出供应商及其可供产品的数量


描述

有 Vendors 表含有 vend_id 供应商id.

| vend_id |

| — |

| a0002 |

| a0013 |

| a0003 |

| a0010 |

有 Products 表含有供应商 id 和供应产品 id

| vend_id | prod_id |

| — | — |

| a0001 | egg |

| a0002 | prod_id_iphone |

| a00113 | prod_id_tea |

| a0003 | prod_id_vivo phone |

| a0010 | prod_id_huawei phone |

问题

列出供应商(Vendors 表中的 vend_id)及其可供产品的数量,包括没有产品的供应商。你需要使用 OUTER JOIN 和 COUNT() 聚合函数来计算 Products 表中每种产品的数量,最后根据 vend_id 升序排序

注意:vend_id 列会显示在多个表中,因此在每次引用它时都需要完全限定它。

示例结果

返回供应商 id 和对应供应商供应的产品的个数

| vend_id | prod_id |

| — | — |

| a0002 | 1 |

| a0013 | 0 |

| a0003 | 1 |

| a0010 | 1 |

示例解析

供应商 a00013 供应的商品不在 Products 表中所以为 0,其他供应商供应的产品为 1 个。

示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

DROP TABLE IF EXISTS `Vendors`;

CREATE TABLE IF NOT EXISTS `Vendors` (

  `vend_id` VARCHAR(255) NOT NULL COMMENT 'vend名称'

);

INSERT INTO `Vendors` VALUES ('a0002'),

('a0013'),

('a0003'),

('a0010');

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

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

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

);

INSERT INTO `Products` VALUES ('a0001','egg'),

('a0002','prod_id_iphone'),

('a00113','prod_id_tea'),

('a0003','prod_id_vivo phone'),

('a0010','prod_id_huawei phone');

解答

利用 COUNT() 函数对 Vendors 中的 vend_id 分组并统计。

另外则是考察 LEFT JOIN,即题目中所说的 OUTER JOIN,其具体使用语法如下。

1

2

3

4

SELECT column_name(s)

FROM table1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

1

SELECT Vendors.vend_id, COUNT(Products.prod_id) FROM Vendors LEFT JOIN Products ON Vendors.vend_id = Products.vend_id GROUP BY Vendors.vend_id ORDER BY Vendors.vend_id;

SQL47 将两个 SELECT 语句结合起来(一)


描述

表 OrderItems 包含订单产品信息,字段 prod_id 代表产品 id、quantity 代表产品数量

| prod_id | quantity |

| — | — |

| a0001 | 105 |

| a0002 | 100 |

| a0002 | 200 |

| a0013 | 1121 |

| a0003 | 10 |

| a0003 | 19 |

| a0003 | 5 |

| BNBG | 10002 |

问题

将两个 SELECT 语句结合起来,以便从 OrderItems 表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序

示例结果

返回产品 id prod_id和产品数量 quantity

| prod_id | quantity |

| — | — |

| a0002 | 100 |

| BNBG | 10002 |

示例解析

产品 id a0002 因为数量等于 100 被选取返回;BNBG 因为是以 BNBG 开头的产品所以返回;最后以产品 id 进行排序返回。

示例

1

2

3

4

5

6

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems`(

    prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

    quantity VARCHAR(255) NOT NULL COMMENT '商品数量'

);

INSERT `OrderItems` VALUES ('a0001',105),('a0002',100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5),('BNBG',10002);

解答

依照题意,其实我们利用一个 SELECT 然后搭配 WHERE 条件查询就能将满足题意的纪律筛选出来。但是为了练习关键字 UNION 的使用,可以将两个条件查询语句分开,然后用 UNION 联接起来,最后则是按照 prod_id 正序排列。

1

SELECT prod_id, quantity FROM OrderItems WHERE quantity = '100' UNION SELECT prod_id, quantity FROM OrderItems WHERE prod_id LIKE 'BNBG%' ORDER BY prod_id;

SQL48 将两个 SELECT 语句结合起来(二)


描述

表 OrderItems 包含订单产品信息,字段 prod_id 代表产品 id、quantity 代表产品数量。

| prod_id | quantity |

| — | — |

| a0001 | 105 |

| a0002 | 100 |

| a0002 | 200 |

| a0013 | 1121 |

| a0003 | 10 |

| a0003 | 19 |

| a0003 | 5 |

| BNBG | 10002 |

问题

将两个 SELECT 语句结合起来,以便从 OrderItems 表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序

注意:这次仅使用单个 SELECT 语句。

示例结果

返回产品 id prod_id 和产品数量 quantity

| prod_id | quantity |

| — | — |

| a0002 | 100 |

| BNBG | 10002 |

示例解析

产品 id a0002 因为数量等于 100 被选取返回;BNBG 因为是以 BNBG 开头的产品所以返回;最后以产品 id 进行排序返回。

示例

1

2

3

4

5

6

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems`(

    prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

    quantity VARCHAR(255) NOT NULL COMMENT '商品数量'

);

INSERT `OrderItems` VALUES ('a0001',105),('a0002',100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5),('BNBG',10002);

解答

根据题意仅使用单个 SELECT 语句,那就直接利用 WHERE 条件查询,然后将两个条件利用连接符 OR 并联即可。

1

SELECT prod_id, quantity FROM OrderItems WHERE prod_id LIKE 'BNBG%' OR quantity = '100' ORDER BY prod_id;

SQL49 组合 Products 表中的产品名称和 Customers 表中的顾客名称


描述

Products 表含有字段 prod_name 代表产品名称

| prod_name |

| — |

| flower |

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述


描述

Products 表含有字段 prod_name 代表产品名称

| prod_name |

| — |

| flower |

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
[外链图片转存中…(img-WtPFyuId-1714163978744)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值