前言

🔥个人主页:不会c嘎嘎
📚专栏传送门:【数据结构】 、【C++】 、【Linux】【算法】【MySQL】
🐶学习方向:C++方向学习爱好者
⭐人生格言:谨言慎行,戒骄戒躁

每日一鸡汤: 

“别怕走得慢,只怕停下来。每一个不曾起舞的日子,都是对生命的辜负。你流下的每一滴汗水,都会在未来某个时刻开花结果。即使现在看不到希望,也要相信,黑夜再长,也挡不住黎明的光。坚持下去,不是因为看见了希望才努力,而是努力了,才能看见希望。”

目录

1.回顾基本查询

2.多表查询

3.自连接

4.子查询

结语


1.回顾基本查询

先带大家来做一下简单的复合查询,这是一个来自oracle 9i的经典测试表题目,大家可以自行导入scott_data: 雇员信息表,练习mysql语法

(1)查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

(2)按照部门号升序而雇员的工资降序排序

(3)使用年薪进行降序排序

(4)显示工资最高的员工的名字和工作岗位

这里使用了子查询获取最高工资,然后再查询工资等于这个值的员工

(5)显示工资高于平均工资的员工信息

这里使用了子查询获取平均工资,然后再查询工资大于这个值的员工

(6)显示每个部门的平均工资和最高工资

先对表通过deptno进行分组,然后再使用聚合函数查询值

(7)显示平均工资低于2000的部门号和它的平均工资

这里的having可以在分组以后使用,相当于where筛选条件

(8)显示每种岗位的雇员总数,平均工资

先对数据通过job分组,然后求人数和平均工资

2.多表查询

实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张EMP,DEPT,SALGRADE来演示如何进行多表查询。

案例:(1)显示雇员名、雇员工资以及所在部门的名字

因为上面的数据来自EMPDEPT表,因此要联合查询

 不加过滤的笛卡尔积表

通过deptno进行过滤

再从过滤后的表中显示出雇员名字,雇员工资以及部门名

(2)显示部门号为10的部门名,员工和工资

先对两个表做笛卡尔积,然后过滤没用的行,最后筛选出deptno=10的员工信息

(3)显示各个员工的姓名,工资,及工资级别

先对两张表做笛卡尔积,根据工资介于工资的等级进行筛选数据

3.自连接

自连接是指在同一张表连接查询,需要对同一张表进行笛卡尔积
(1)显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno
1.使用子查询,先在子查询中查出ford的上级编号,然后再在emp表中找到这个编号相等的员工编号的员工就是ford的上级

2.使用多表查询,先查出下级的上级编号与员工表中对应的员工编号的人

然后根据上面的临时表再进行筛选出名字叫ford的员工

4.子查询

子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询
单行子查询
(1)显示 SMITH 同一部门的员工
先查询smith的部门号
再筛选和这个部门号相同的员工
多行子查询
(1)使用 in 关键字查询和 10 号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含 10号 己的
先用子查询出10号部门的岗位
再查询在这些工作岗位并且不是10号部门中的员工,in指的是一个范围。
(2)使用 all 关键字显示工资比部门 30 的所有员工的工资高的员工的姓名、工资和部门号
先子查询30号部门员工的工资
再查询比30号部门所有员工的工资都多的员工
(3)any 关键字;显示工资比部门 30 的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
只需要把all换成any表示任意一个其中的值
多列子查询
单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句
案例:查询和 SMITH 的部门和岗位完全相同的所有雇员,不含 SMITH 本人
先查询smith的部门和岗位
再查询 完全相同的所有雇员,不含 SMITH 本人
在from子句中使用子查询
子查询语句出现在 from 子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。
(1) 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
先对部门进行分组查询每个部门的平均工资
然后把上面的查询结果当做一个临时表格与emp进行多表查询
在这个多表查询的结果中查找大于平均部门工资的员工
(2)查找每个部门工资最高的人的姓名、工资、部门、最高工资
先查询每个部门最高工资
然后作为临时表与emp进行多表查询
最后查询工资等于max_sal的员工
(3) 显示每个部门的信息(部门名,编号,地址)和人员数量
使用多表:这里虽然group by后面跟了很多列参数,但是 真正决定分组的仍然是“业务键”(这里是 deptno)
使用多表子查询:
先查询部门和部门人数
再与dept进行多表查询

结语

本文介绍了MySQL数据库查询操作,包括基本查询、多表查询、自连接和子查询等高级技巧。通过经典的scott_data雇员信息表案例,详细讲解了复合查询条件设置、分组聚合、排序操作等基础查询方法。在多表查询部分,演示了笛卡尔积过滤和表连接应用。特别讲解了自连接查询和子查询的多种用法,包括单行/多行子查询、多列子查询及在FROM子句中使用子查询作为临时表的技巧。文章还提供了部门统计、工资级别筛选等实用案例,适合数据库学习者提升SQL查询技能。

以上就是本期博客的全部内容,感谢各位的阅读以及观看。如果内容有误请大佬们多多指教,一定积极改进,加以学习。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐