Mysql 内连接 外连接 自连接

发布于:2025-05-15 ⋅ 阅读:(12) ⋅ 点赞:(0)

内连接查询的是两张表中交集的部分

有两张表emp和dept 

查询两张表中

#查询每一个员工的姓名,及关联的部门名称(显示内连接实现)-INNER JOIN ... ON
#--表结构: emp,dept;
#--连接条件 emp.dept_id=dept.id
select e.name,d.name from emp e inner join dept d e.dept_id=dept.id;

左外连接完全包含左表和左表与右表交集的部分

右外连接完全包含右表和右表与左表交集的部分

#外连接
#11查询emp表中所有数据,和对应的部门信息(左外连接)
#表结构:emp, dept
#连接条件:emp.dept_id=dept.id
select e.*,d.name  from emp e left outer  join  dept d e.dept_id=d.id;
#2.查询emp表所有的数据,和对应的员工信息(右外连接)
select d.*,e.* from emp e 
select e.*,d.* from emp e right outer join dept d on  e.dept_id =d.id

一般都是左外用的多,因为右外可以改成左外

select e.*,d.* from dept d left outer join emp e on  e.dept_id =d.id
#自连接
#1.查询员工 及其所属领导的名字
#表结构 :emp
#不要看成一张表,要看成两张表

select a.name,b.name from emp a ,emp b where a.managerid =b.id;
#查询所有员工emp及其领导的名字emp,如果员工没有领导,也需要查询出来
#表结构 emp a ,emp b;

select a.name'员工',b.name'领导' from emp a left join emp b on a.managerid=b.id;

联合查询union

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集


#联合查询
#1.将薪资低于5000的员工。和年龄小于50岁的员工全部查询出来

select * from emp where salary<5000
union all
select * from emp where age<50;

#去除都包含的,保留一个
select * from emp where salary<5000
union
select * from emp where age<50;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致

union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重


网站公告

今日签到

点亮在社区的每一天
去签到