MySQL——复合查询

基本查询回顾

下面的复合查询我们要用到基本查询用到的表:
员工表: emp
部门表: dept
薪资等级表:salagrade
https://blog.csdn.net/2601_95175861/article/details/161271536?spm=1001.2014.3001.5501 在文章的最后面有创建语句,可以自行复制,然后跟着我走

多表查询

要求:显示部门号为10的部门名,员工名和工资
首先进行多表查询时,我们就需要把两张表连起来一起看
select * from emp,dept; 说明在查询表的时候可以多个表连起来一起查

就是一张表中拿第一条数据,与第二张表所有数据中每个数据连在一起,类似于穷举,这里是叫做笛卡尔积,这里也可以给表查询的表取别名

自己可以试试看看是不是emp中每条数据都对应连接dept中所有数据
然而穷举的数据对应有些是没有意义的,我们要的是员工表的每个数据的部门号对应部门表的部门号,一般来说,公司不会搞唯一键,只会有个主键,部门号就相当于唯一键约束,所以部门号能确定员工在哪个部门,所以我们可以用部门号相等的数据来对笛卡尔积的数据进行筛选
要求:显示部门号为10的部门名,员工名和工资
所以这个可以这样写 select ename, sal,dname from EMP, DEPT where EMP.deptno=DEPT.deptno and
DEPT.deptno = 10;

注意: 如果一个字段名不是你要查询的多表表中的唯一字段就要指名查哪个表的,比如虽然说这里的deptno两个表指名意义相同,但也可以指名显示哪个表的deptno SQL语句为: 表名.deptno 这样写就是指名拿哪个表的数据,虽然说在屏幕上显示的是两个表连起来了,但是查询的字段并不是在一张表而是各自表中指明,所以查询时需要写清楚

自连接

意思为一张表也能连接自己来做笛卡尔积,但是需要把其中一张表弄个别名或两张表都弄别名才行
显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

思路为:自己与自己做笛卡尔积后,筛选的条件为员工表FORD的mgr的数据与连接的员工表的empno也就是员工号相同就是找到了FORD的领导

主要的难点就是笛卡尔积穷举出来的数据你自己要通过where 条件去筛选

子查询

显示SMITH同一部门的员工

意思是select 语句中能嵌套select语句


执行的顺序会是先执行where 条件的select语句也就是子查询,这个语句是查询smith在哪个部门,并且注意: 你提供的列数与子查询显示的列数需要相匹配,比如如果这里改一下写成 deptno=(select deptno,ename from emp where ename='smith'),就会报错,因为你这只提供一列做相等运算符,而等号右边有两个值: deptno和ename

多行子查询

in关键字

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己

首先10号部门的岗位有这些


in语句就是,里面的数据组成一个集合,比如这里是十号部门的job中每个数据组成一个集合,where 条件中的 job只要存在在这个集合当中就成立,条件中的job属于被包含关系,它只要属于这个集合的数据就是成立的

all关键字

显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

all关键字就是, where 条件中 该字段比这个集合当中所有人的工资都高就成立,这里的子查询的sal就是30号部门所有人的工资。

any关键字

显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门
的员工)

这里就是wehre 语句中 只要工资比30号部门的工资集合中任意一个人的工资高就条件成立

多列子查询

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

子查询中显示了两列,所以接受也要是两列,这就是多列子查询
总结: 这里的多表连接中,所有的查询后显示出来的数据也能看作表,也能与其他表做笛卡尔积,但一定要给它取个别名,多列子查询和多行子查询也就是把一个select语句作为另一个select的where条件而已,自己先可以把一个个select查询的结果先自己显示出来,根据情况再进行于where条件结合

相关推荐
2401_896732132 小时前
MySQL小笔记
mysql
程序员清风3 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律3 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵3 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅4 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_5 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界6 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB7 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛7 小时前
MySQL的操作
数据库·mysql
猫咪很可爱7 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle