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

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

| a0003 | 10 |

| a0003 | 19 |

| a0003 | 5 |

问题

编写 SQL 语句,从 Products 表中检索所有的产品名称(prod_name),以及名为 quant_sold 的计算列,其中包含所售产品的总数(在 OrderItems 表上使用子查询和 SUM(quantity) 检索)。

示例结果

返回产品名称 prod_name 和产品售出数量总和

| prod_name | quant_sold |

| — | — |

| egg | 105 |

| sockets | 1300 |

| coffee | 1121 |

| cola | 34 |

示例解析

prod_name 是 cola 的 prod_id 为 a0003,quantity 总量为 34,返回结果无需排序

示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

DROP TABLE IF EXISTS `Products`;

CREATE TABLE IF NOT EXISTS `Products` (

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

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

);

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

('a0002','sockets'),

('a0013','coffee'),

('a0003','cola');

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems`(

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

    quantity INT(16) NOT NULL COMMENT '商品数量'

);

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

解答

解法类似于 35 题,同样主要有两种方式,第一种是通过内连接的方式。

1

SELECT prod_name, SUM(quantity) AS quant_sold FROM OrderItems, Products WHERE Products.prod_id = OrderItems.prod_id GROUP BY prod_name;

第二种则是通过子查询的方式。

1

SELECT prod_name, (SELECT SUM(quantity) FROM OrderItems WHERE OrderItems.prod_id = Products.prod_id) FROM Products;

SQL37 返回顾客名称和相关订单号


描述

Customers 表有字段顾客名称 cust_name、顾客 id cust_id

| cust_id | cust_name |

| — | — |

| cust10 | andy |

| cust1 | ben |

| cust2 | tony |

| cust22 | tom |

| cust221 | an |

| cust2217 | hex |

Orders订单信息表,含有字段order_num订单号、cust_id顾客id

| order_num | cust_id |

| — | — |

| a1 | cust10 |

| a2 | cust1 |

| a3 | cust2 |

| a4 | cust22 |

| a5 | cust221 |

| a7 | cust2217 |

问题

编写 SQL 语句,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),并按顾客名称再按订单号对结果进行升序排序。你可以尝试用两个不同的写法,一个使用简单的等联结语法,另外一个使用 INNER JOIN。

示例结果

cust_name 代表用户名称 cust_name 和订单号 order_num。

| cust_name | order_num |

| — | — |

| an | a5 |

| andy | a1 |

| ben | a2 |

| hex | a7 |

| tom | a4 |

| tony | a3 |

示例解析

顾客名称为 an 的 cust_id 为 cust221,他的订单号为 a5。

示例

1

2

3

4

5

6

7

8

9

10

11

12

13

DROP TABLE IF EXISTS `Orders`;

CREATE TABLE IF NOT EXISTS `Orders`(

  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

  cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

);

INSERT `Orders` VALUES ('a1','cust10'),('a2','cust1'),('a3','cust2'),('a4','cust22'),('a5','cust221'),('a7','cust2217');

DROP TABLE IF EXISTS `Customers`;

CREATE TABLE IF NOT EXISTS `Customers`(

    cust_id VARCHAR(255) NOT NULL COMMENT '客户id',

    cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'

);

INSERT `Customers` VALUES ('cust10','andy'),('cust1','ben'),('cust2','tony'),('cust22','tom'),('cust221','an'),('cust2217','hex');

解答

考察 SQL 中的 INNER JOIN,其实也就是 JOIN。主要用于筛选出两个表中的交集部分。

使用语法如下:

1

2

3

4

SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name=table2.column_name;

因此,此题使用 INNER JOIN 实现的方法如下。

1

SELECT cust_name, Orders.order_num FROM Customers INNER JOIN Orders ON Orders.cust_id = Customers.cust_id ORDER BY cust_name;

此外,也可以使用最常用的 WHERE 来进行联接。

1

SELECT cust_name, order_num FROM Customers, Orders WHERE Customers.cust_id = Orders.cust_id ORDER BY cust_name;

SQL38 返回顾客名称和相关订单号以及每个订单的总价


描述

Customers 表有字段,顾客名称:cust_name、顾客 id:cust_id

| cust_id | cust_name |

| — | — |

| cust10 | andy |

| cust1 | ben |

| cust2 | tony |

| cust22 | tom |

| cust221 | an |

| cust2217 | hex |

Orders 订单信息表,含有字段,订单号:order_num、顾客 id:cust_id

| order_num | cust_id |

| — | — |

| a1 | cust10 |

| a2 | cust1 |

| a3 | cust2 |

| a4 | cust22 |

| a5 | cust221 |

| a7 | cust2217 |

OrderItems 表有字段,商品订单号:order_num、商品数量:quantity、商品价格:item_price

| order_num | quantity | item_price |

| — | — | — |

| a1 | 1000 | 10 |

| a2 | 200 | 10 |

| a3 | 10 | 15 |

| a4 | 25 | 50 |

| a5 | 15 | 25 |

| a7 | 7 | 7 |

问题

除了返回顾客名称和订单号,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序

示例结果

返回顾客名称 cust_name、订单号 order_num、订单总额 OrderTotal

| cust_name | order_num | OrderTotal |

| — | — | — |

| an | a5 | 375 |

| andy | a1 | 10000 |

| ben | a2 | 2000 |

| hex | a7 | 49 |

| tom | a4 | 1250 |

| tony | a3 | 150 |

示例解析

例如顾客名称 cust_name 为 an 的顾客的订单 a5 的订单总额为 quantity*item_price = 15 * 25 = 375,最后以 cust_name 和 order_num 来进行升序排序

示例

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

DROP TABLE IF EXISTS `Orders`;

CREATE TABLE IF NOT EXISTS `Orders`(

  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

  cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

);

INSERT `Orders` VALUES ('a1','cust10'),('a2','cust1'),('a3','cust2'),('a4','cust22'),('a5','cust221'),('a7','cust2217');

DROP TABLE IF EXISTS `Customers`;

CREATE TABLE IF NOT EXISTS `Customers`(

    cust_id VARCHAR(255) NOT NULL COMMENT '客户id',

    cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'

);

INSERT `Customers` VALUES ('cust10','andy'),('cust1','ben'),('cust2','tony'),('cust22','tom'),('cust221','an'),('cust2217','hex');

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems`(

  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

  quantity INT(16) NOT NULL COMMENT '商品数量',

  item_price INT(16) NOT NULL COMMENT '商品价格'

);

INSERT `OrderItems` VALUES ('a1',1000,10),('a2',200,10),('a3',10,15),('a4',25,50),('a5',15,25),('a7',7,7);

解答

SQL 语句先后顺序:

1

2

3

4

5

SELECT  ……

FROM ……

WHERE ……

GROUP BY ……

ORDER BY ……

书写 SQL 语句时,一定要遵守以上关键字的先后顺序。然后根据题意将各个条件组合即可。

1

2

3

4

5

SELECT cust_name, Orders.order_num, SUM(quantity * item_price) AS OrderTotal

FROM Customers, Orders, OrderItems

WHERE Customers.cust_id = Orders.cust_id AND Orders.order_num = OrderItems.order_num

GROUP BY Customers.cust_name, Orders.order_num

ORDER BY cust_name, Orders.order_num;

SQL39 确定哪些订单购买了 prod_id 为 BR01 的产品(二)


描述

表 OrderItems 代表订单商品信息表,prod_id 为产品 id;Orders 表代表订单表有 cust_id 代表顾客id和订单日期 order_date

OrderItems 表

| prod_id | order_num |

| — | — |

| BR01 | a0001 |

| BR01 | a0002 |

| BR02 | a0003 |

| BR02 | a0013 |

Orders 表

| order_num | cust_id | order_date |

| — | — | — |

| a0001 | cust10 | 2022-01-01 00:00:00 |

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

[外链图片转存中…(img-HyVER1oo-1713445235438)]

[外链图片转存中…(img-iwaojZFO-1713445235438)]

[外链图片转存中…(img-OTymvOH4-1713445235438)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-siZljKrG-1713445235439)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值