09【多表查询案例】_数据库多表查询某人的基本情况和图书借阅情况的代码(1)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

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

需要这份系统化资料的朋友,可以点击这里获取

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

+ - [具体操作:](#_125)
	- [查询结果:](#_149)
+ [9.3 练习2](#93_2_154)
+ - [具体操作:](#_159)
	- [查询结果:](#_186)
+ [9.4 练习3](#94_3_191)
+ - [具体操作:](#_196)
	- [查询结果](#_218)
+ [9.5 练习4](#95_4_223)
+ - [具体操作:](#_227)
+ [9.6 练习5](#96_5_258)
+ - [具体操作:](#_263)
	- [查询结果](#_300)
+ [9.7 练习6](#97_6_305)
+ - [具体操作:](#_310)
	- [查询结果:](#_325)
+ [9.8 练习7](#98_7_330)
+ - [具体操作:](#_335)
	- [查询结果](#_351)

09【多表查询案例】

9.1 准备数据

9.1.1 SQL语句
-- 图书表
DROP TABLE IF EXISTS `book`;

CREATE TABLE `book`  (
  `id` int(11) NOT NULL COMMENT '图书id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '书名',
  `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '定价',
  `publish` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出版社',
  `publish\_date` datetime(0) NULL DEFAULT NULL COMMENT '出版日期',
  PRIMARY KEY (`id`) USING BTREE
) ;

INSERT INTO `book` VALUES (1, 'Java入门到精通', 49.80, '机械工业出版社', '2020-10-28 00:00:00');
INSERT INTO `book` VALUES (2, '高性能MySQL', 68.90, '北京大学出版社', '2021-08-05 00:00:00');
INSERT INTO `book` VALUES (3, 'Java并发编程实战', 65.50, '电子工业出版社', '2010-07-06 00:00:00');
INSERT INTO `book` VALUES (4, '深入理解Java虚拟机', 88.90, '清华大学出版社', '2013-03-14 00:00:00');
INSERT INTO `book` VALUES (5, '图解TCP/IP', 76.90, '机械工业出版社', '2014-10-28 00:00:00');

-- 学校表
DROP TABLE IF EXISTS `university`;
CREATE TABLE `university`  (
  `id` int(11) NOT NULL AUTO\_INCREMENT COMMENT '学校id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学校名称',
  `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学校地址',
  `short\_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学校简称',
  `info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学校简介',
  PRIMARY KEY (`id`) USING BTREE
) ;

INSERT INTO `university` VALUES (1, '中国科学技术大学', '合肥', '中科大', '世界一流大学');
INSERT INTO `university` VALUES (2, '西安交通大学', '西安', '西安交大', '世界知名高水平大学');
INSERT INTO `university` VALUES (3, '江西财经大学', '南昌', '江财', '中国一流大学');
INSERT INTO `university` VALUES (4, '华南农业大学', '广州', '华农', '中国一流大学');
INSERT INTO `university` VALUES (5, '长沙理工大学', '长沙', '长沙理工', '中国一流大学');

-- 学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(11) NOT NULL COMMENT 'id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '籍贯',
  `u\_id` int(11) NULL DEFAULT NULL COMMENT '学校id',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `school\_s\_id\_fk`(`u\_id`) USING BTREE,
  CONSTRAINT `school\_s\_id\_fk` FOREIGN KEY (`u\_id`) REFERENCES `university` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ;

INSERT INTO `student` VALUES (1, '小明', 20, '男', '辽宁辽阳', 1);
INSERT INTO `student` VALUES (2, '小红', 22, '女', '山东威海', 3);
INSERT INTO `student` VALUES (3, '小军', 27, '男', '山西吕梁', 3);
INSERT INTO `student` VALUES (4, '小龙', 24, '男', '河北保定', 2);
INSERT INTO `student` VALUES (5, '小丽', 22, '女', '陕西延安', 4);
INSERT INTO `student` VALUES (6, '小辉', 19, '男', '河南洛阳', 5);

-- 借阅表
DROP TABLE IF EXISTS `borrow`;

CREATE TABLE `borrow`  (
  `s\_id` int(11) NOT NULL COMMENT '学生id',
  `b\_id` int(11) NULL DEFAULT NULL COMMENT '图书id',
  `borrow\_date` datetime(0) NULL DEFAULT NULL COMMENT '借阅日期',
  `count` int(11) NULL DEFAULT NULL COMMENT '借阅数量',
  INDEX `stu\_s\_id\_fk`(`s\_id`) USING BTREE,
  INDEX `book\_b\_id\_fk`(`b\_id`) USING BTREE,
  CONSTRAINT `book\_b\_id\_fk` FOREIGN KEY (`b\_id`) REFERENCES `book` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `stu\_s\_id\_fk` FOREIGN KEY (`s\_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ;

INSERT INTO `borrow` VALUES (1, 2, '2020-01-08 21:22:39', 1);
INSERT INTO `borrow` VALUES (3, 1, '2020-04-15 21:30:30', 2);
INSERT INTO `borrow` VALUES (3, 3, '2020-06-18 09:22:39', 2);
INSERT INTO `borrow` VALUES (2, 4, '2020-09-28 12:22:39', 3);
INSERT INTO `borrow` VALUES (4, 5, '2020-04-14 13:22:39', 2);
INSERT INTO `borrow` VALUES (5, 3, '2020-08-19 13:22:39', 1);
INSERT INTO `borrow` VALUES (6, 5, '2020-12-24 13:22:39', 2);

9.1.2 表关系

在这里插入图片描述

学生表对学校表:一对多

学生表对图书表:多对多

9.2 练习1

  • 需求:查询所有学生信息。显示学生编号,学生姓名,籍贯,学校名称,学校简介
具体操作:
  1. 确定要查询哪些表:学生表和学校表
  2. 确定表连接条件:student.s_id=university.id
  3. 确定查询的字段:员工编号(student),员工姓名(student),籍贯(student),学校名称(university),学校简介(university)
-- 练习1:查询所有学生信息。显示员工编号,员工姓名,籍贯,学校名称,学校简称

-- 1. 确定查询哪些表:学生表,学校表
select \* from student s inner join university u;

-- 2.确定表连接的条件
select \* from student s inner join university u on s.u_id = u.id;

-- 3. 确定查询哪些列:员工编号,员工姓名,工资,职务名称,职务描述
select s.id 学生编号,s.name 学生姓名,s.address 籍贯,u.name 学校名称,u.info 学校简介 from student s 
inner join university u on s.u_id = u.id;

查询结果:

在这里插入图片描述

9.3 练习2

  • 需求:查询学校是’中国一流大学’的学生姓名、年龄、籍贯、学校名称
具体操作:
  1. 确定要查询哪些表:学生表和学校表
  2. 确定表连接条件:s.s_id=u.id
  3. 确定查询添加:学校是’中国一流大学’
  4. 确定查询字段:学生姓名、年龄、籍贯、学校名称
-- 查询学校是'中国一流大学'的学生姓名、年龄、籍贯、学校名称

-- 1.确定查询哪些表:学生表和学校表
select \* from student s inner join university u;

-- 2. 确定表连接条件:s.s\_id=u.id
select \* from student s inner join university u on s.u_id = u.id;

-- 2. 确定表连接条件:s.s\_id=u.id
select \* from student s inner join university u on s.u_id = u.id where u.name='中国一流大学';

-- 3. 查询哪些列:学生姓名、年龄、籍贯、学校名称
select s.name 姓名,s.age 年龄,s.address 籍贯,u.name 学校名称 from student s 
inner join university u on s.u_id = u.id 
where u.info='中国一流大学';

查询结果:

在这里插入图片描述

9.4 练习3

  • 需求:查询所有学生借的书的名称、单价、以及学生id、姓名、籍贯
具体操作:
  1. 确定要查询哪些表:学生表、学生借阅表、图书表
  2. 确定表连接条件:
    1. 学生关联借阅表:student.id=borrow.s_id
    2. 再关联图书表:borrow.b_id=book.id
  3. 确定查询的字段:学生id、姓名、籍贯、书名、单价
-- 方式1:先连接4张表,再通过on指定所有的条件

-- 1. 查询4张表并确定连接条件
select \* from student s 
inner join borrow bo on s.id=bo.s_id
inner join book b on b.id=bo.b_id;

-- 2. 确定查询的字段
select s.id 学生id,s.name 姓名,s.address 籍贯,b.name 书名,b.price 单价 from student s 
inner join borrow bo on s.id=bo.s_id
inner join book b on b.id=bo.b_id;

查询结果

在这里插入图片描述

9.5 练习4

  • 需求:查询借书数量最高的学生详情
具体操作:
  1. 确定要查询哪些表:学生表、借阅表
  2. 确定关联条件:student.id=borrow.s_id
  3. 根据学生id进行分组,求出每个学生的总借阅数量,查询学生信息、学生借阅总数
  4. 根据条件总借阅数量倒叙排序
  5. 只要第一条数据
-- 1. 确定要查询哪些表并且确定连接条件
select \* from student s inner join borrow bo on s.id=bo.s_id; 

-- 2. 根据学生id进行分组,求出每个学生的总借阅数量
select s.\*,sum(bo.count) 借阅总数 from 
student s inner join borrow bo on s.id=bo.s_id 
group by s.id; 

-- 3. 根据条件总借阅数量倒叙排序并且只要第一条数据
select s.\*,sum(bo.count) 借阅总数 from 
student s inner join borrow bo on s.id=bo.s_id 
group by s.id 
order by sum(bo.count) desc 
limit 1;

在这里插入图片描述


9.6 练习5

  • 需求:查询学校是"中国一流大学"的学生借书情况,只查询Java相关书籍的记录,查询学生id、姓名、籍贯、书籍名称、出版社、借阅数量、借阅时间、学校名称、学校地址
具体操作:
  1. 确定要查询哪些表:学生表、学生借阅表、图书表、学校表
  2. 确定表连接条件:
    1. 学生关联借阅表:student.id=borrow.s_id
    2. 再关联图书表:borrow.b_id=book.id
    3. 在关联学校表:university.id=student.u_id
  3. 确定查询条件:university.info='中国一流大学' 并且book.name like '%Java%'
  4. 确定查询的字段:学生id、姓名、籍贯、书籍名称、出版社、借阅数量、借阅时间、学校名称、学校地址
-- 1. 确定要查询哪些表并且确定连接条件
select \* from student s 
inner join borrow bo on s.id=bo.s_id


**在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。**


需要完整版PDF学习资源

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

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

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值