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条件结合

相关推荐
熊猫_豆豆12 分钟前
QT6 Android C++ 自制美观闹钟
android·c++·qt·闹钟
美狐美颜SDK开放平台12 分钟前
Android/iOS直播APP平台开发中的视频美颜SDK优化技巧
android·ios·音视频·美颜sdk·第三方美颜sdk
Database_Cool_34 分钟前
向量检索加速首选:阿里云 Tair 内置向量能力毫秒级召回
数据库·阿里云
强健的石头1 小时前
django文件对象是什么?
数据库·django·sqlite
灯澜忆梦2 小时前
MySQL 完整学习路线
学习·mysql
ClouGence2 小时前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
烟漠河洛2 小时前
线上事故复盘:Redis幂等性设计边界没覆盖跨状态请求,订单状态机直接崩了
数据库·redis·缓存
Minxinbb2 小时前
TDSQL for MySQL 服务器重启操作
数据库·mysql·dba
SelectDB2 小时前
Doris 实战:用 Colocate Join 消除 Shuffle,AB 指标计算性能提升 145 倍 🚀
数据库·性能优化·ab测试
PawSQL2 小时前
PawSQL 技术月报 | 2026年6月
数据库·sql·tdsql·pawsql·sql审核