Mysql 复合查询

发布时间:2026/11/14 19:55:03

Mysql 复合查询 多表查询实际开发中往往数据来自不同的表所以需要多表查询。本节我们用一个简单的公司管理系统有三张 表EMP,DEPT,SALGRADE来演示如何进行多表查询。部门表 dept员工表 emp工资等级表 salgrade案例显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表因此要联合查询select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptnodept.deptno;其实我们只要emp表中的deptno dept表中的deptno字段的记录,所以后面要有个where限定结果显示部门号为10的部门名员工名和工资select ename, sal,dname from EMP, DEPT where EMP.deptnoDEPT.deptno and DEPT.deptno 10;显示各个员工的姓名工资及工资级别select ename,sal,grade from emp,salgrade where emp.sal between losal and hisal;自连接自连接是指在同一张表连接查询案例使用的子查询使用多表查询自查询-- 使用到表的别名--from emp leader, emp worker给自己的表起别名因为要先做笛卡尔积所以别名可以先识 别子查询子查询是指嵌入在其他sql语句中的select语句也叫嵌套查询单行子查询返回一行记录的子查询显示SMITH同一部门的员工select * from EMP WHERE deptno (select deptno from EMP where enamesmith);多行子查询返回多行记录的子查询in关键字查询和10号部门的工作岗位相同的雇员的名字岗位工资部门号但是不包含10自 己的select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno10) and deptno10;all关键字显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号select ename, sal, deptno from EMP where sal all(select sal from EMP where deptno30);any关键字显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号包含自己部门 的员工select ename, sal, deptno from EMP where sal any(select sal from EMP where deptno30);多列子查询单行子查询是指子查询只返回单列单行数据多行子查询是指返回单列多行数据都是针对单列而言的而多列子查询则是指查询返回多个列数据的子查询语句案例查询和SMITH的部门和岗位完全相同的所有雇员不含SMITH本人mysql select ename from EMP where (deptno, job)(select deptno, job from EMP where enameSMITH) and ename SMITH;在from子句中使用子查询子查询语句出现在from子句中。这里要用到数据查询的技巧把一个子查询当做一个临时表使用。 案例 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资//获取各个部门的平均工资将其看作临时表 select ename, deptno, sal, format(asal,2) from EMP, (select avg(sal) asal, deptno dt from EMP group by deptno) tmp where EMP.sal tmp.asal and EMP.deptnotmp.dt;查找每个部门工资最高的人的姓名、工资、部门、最高工资select emp.ename, emp.sal, emp.deptno, ms from emp, (select max(sal) ms, deptno from emp group by deptno) tmp where emp.deptnotmp.deptno and emp.saltmp.ms;显示每个部门的信息部门名编号地址和人员数量方法1使用多表select dept.dname, dept.deptno, dept.loc,count(*) 部门人数 from emp,dept where emp.deptnodept.deptno group by dept.deptno,dept.dname,dept.loc;方法2使用子查询-- 1. 对EMP表进行人员统计 select count(*), deptno from emp group by deptno; -- 2. 将上面的表看作临时表 select dept.deptno, dname, mycnt, loc from dept, (select count(*) mycnt, deptno from emp group by deptno) tmp where dept.deptnotmp.deptno;合并查询在实际应用中为了合并多个select的执行结果可以使用集合操作符 unionunion allunion该操作符用于取得两个结果集的并集。当使用该操作符时会自动去掉结果集中的重复行。案例将工资大于2500或职位是MANAGER的人找出来select ename, sal, job from emp where sal2500 union select ename, sal, job from emp where jobMANAGER;--去掉了重复记录union all该操作符用于取得两个结果集的并集。当使用该操作符时不会去掉结果集中的重复行。案例将工资大于25000或职位是MANAGER的人找出来select ename, sal, job from emp where sal2500 union all select ename, sal, job from emp where jobMANAGER;连接查询重点表的连接分为内连和外连内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选我们前面学习的查询都是内连 接也是在开发过程中使用的最多的连接查询。select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件备注前面学习的都是内连接案例显示SMITH的名字和部门名称-- 用前面的写法 select ename, dname from emp, dept where emp.deptnodept.deptno and enameSMITH; -- 用标准的内连接写法 select ename, dname from emp inner join dept on emp.deptnodept.deptno and enameSMITH;外连接外连接分为左外连接和右外连接左外连接如果联合查询左侧的表完全显示我们就说是左外连接。select 字段名 from 表名1 left join 表名2 on 连接条件案例-- 建两张表 create table stu (id int, name varchar(30)); -- 学生表 insert into stu values(1,jack),(2,tom),(3,kity),(4,nono); create table exam (id int, grade int); -- 成绩表 insert into exam values(1, 56),(2,76),(11, 8);查询所有学生的成绩如果这个学生没有成绩也要将学生的个人信息显示出来-- 当左边表和右边表没有匹配时也会显示左边表的数据 select * from stu left join exam on stu.idexam.id;右外连接如果联合查询右侧的表完全显示我们就说是右外连接。select 字段 from 表名1 right join 表名2 on 连接条件案例对stu表和exam表联合查询把所有的成绩都显示出来即使这个成绩没有学生与它对应也要 显示出来select * from stu right join exam on stu.idexam.id;列出部门名称和这些部门的员工信息同时列出没有员工的部门方法一select d.dname, e.* from dept d left join emp e on d.deptnoe.deptno;方法二select d.dname, e.* from emp e right join dept d on d.deptnoe.deptno;
延伸阅读

更多相关文章

2026/11/14 10:38:42

STM32串口中断通信:从阻塞轮询到高效并发的HAL库实战指南

1. 从阻塞到响应:为什么串口通信必须用中断? 搞STM32开发的,串口通信是绕不开的基础。很多新手教程都是从HAL库的 HAL_UART_Transmit 和 HAL_UART_Receive 这两个轮询(Polling)函数开始的,代码简单直接…

2026/11/8 21:14:00

智能体入门:概念、架构与应用亮点

智能体(AI Agent)可以理解为一种具备自主思考与行动能力的人工智能系统。如果说传统AI像个只会执行单一指令的"工具",智能体就更像一位能理解目标、自己想办法完成复杂任务的"数字伙伴"或"虚拟员工"。&#x1…

2026/11/9 12:25:09

VMware虚拟机IPv6配置全攻略:从桥接到NAT模式实战指南

1. 项目背景与核心价值:为什么要在VMware中开启IPv6?如果你还在用VMware搭建测试环境、部署服务,却只停留在IPv4的世界里,那可能已经落后于时代了。我最近在为一个分布式微服务项目搭建开发环境时,就遇到了一个典型问题…

2026/11/14 19:53:22

郑州应急局电工证是上岗必备,04年证还能用吗?

郑州应急局电工证是上岗必备,04年证还能用吗? 急需特种作业证才能上岗找工作,郑州应急局电工证是很多建筑工人心中的“上岗必备”。但很多人还分不清04年的电工证还能不能用,或者现在考的新证到底有什么不同。尤其是像新乡这样的建筑工地,电工证几乎…

2026/11/14 19:53:22

萍乡弱电电工证怎么报名?转岗电工必须知道的实操干货

萍乡弱电电工证怎么报名?转岗电工必须知道的实操干货 你现在急需特种作业证才能上岗找工作,但对萍乡弱电电工证的报名流程、考试内容和执业范围一无所知?别急,这篇文章从报考门槛、备考技巧到证书价值,给你讲透彻。…

2026/11/14 19:53:22

电工证考不过白交培训费?河北平山电工证考试点真实经历揭秘

电工证考不过白交培训费?河北平山电工证考试点真实经历揭秘 怕考不过白交培训费?河北平山电工证考试点真实经历告诉你,不是每个培训机构都能让你顺利拿证!去年在河北平山参加电工证考试的张师傅,就因为选错了培训点,结果不仅考试挂了,连补考都没赶上,…

2026/11/14 19:53:22

二级电工证报考要求丢了怎么补办 电子证书怎么查

二级电工证报考要求丢了怎么补办 电子证书怎么查 证书过期了不知道怎么复审延期,你不是一个人。去年南阳卧龙区一个电工老王,因为没及时办理复审,结果被单位停职,连带项目都停工了,差点丢了饭碗。现在你手里的二级电工证,哪怕只是电子证书,也得按时“…

2026/11/14 19:53:22

电工证总共要审几年在哪考最靠谱

电工证总共要审几年在哪考最靠谱 学历不高怕报不上名,但电工证考试真的不看学历,只要你有初中及以上学历,就能报名参加考试。而且电工证不是一劳永逸的, 电工证总共要审几年…

2026/11/14 19:48:01

平顶山中级电工证报考保姆级教程:外省证怎么转过来

平顶山中级电工证报考保姆级教程:外省证怎么转过来 之前考的证在外省能不能转过来?这个问题困扰了太多像你一样的工人。别急,今天这篇【平顶山中级电工证报考保姆级教程】就来帮你解决异地转证难题,还带你深入了解中级电工证在平顶山的薪资前景和职业发展…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑