【mysql学习笔记19】多表查询

笛卡尔积查询

select * from emp,dept;
相当于对emp表和dept做了笛卡尔积操作

简单多表查询

select * from emp,dept where emp.dept_id=dept.id;
相当于查询员工的部门信息

内连接

语法1:select * from emp inner join dept on emp.dept_id=dept.id;
语法2:select * from emp,dept where emp.dept_id=dept.id;
两者效果是一样的

左连接、右连接、内连接综合练习

表结构
在这里插入图片描述
【mysql学习笔记19】多表查询_第1张图片

select * from emp,dept where emp.dept_id=dept.id-1 or emp.dept_id=dept.id;
select * from emp left join dept on emp.dept_id=dept.id-1 or emp.dept_id=dept.id;
select * from emp right join dept on emp.dept_id=dept.id;

结果展示(按sql语句顺序)
在这里插入图片描述
在这里插入图片描述
【mysql学习笔记19】多表查询_第2张图片
说明
左连接就是把左表中没有出现过的记录拿出来,然后在剩余的字段中全填null。
右连接同理。

自连接

select 字段列表 from 表A 别名A join 表B 别名B on 条件;
select 字段列表 from 表A 别名A left join 表B 别名B on 条件;
select 字段列表 from 表A 别名A right join 表B 别名B on 条件;

联合查询

select 字段列表 from 表名列表 union all select 字段列表 from 表名列表
将两个select语句的结果合并起来,前提是两个select查询出来的字段列表是一致的,否则无法合并。
合并后可能会有重复数据,如果想要去重,只要把all关键字去掉即可。

子查询

select * from t1 where c1=(select c2 from t2);
子查询结果有四种情况:
1.结果为一行一列
查询结果作为单个值搭配= < <= > >= <>使用
2.结果为一行多列
在这里插入图片描述

3.结果为多行一列
查询结果可以当作一个集合,搭配in、not in、all、any、some来使用(some和any是一样的)
例如查询比财务部所有人工资都高的员工信息
在这里插入图片描述
4.结果为多行多列
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(mysql,mysql,学习,数据库)