内连接查询的是两张表中交集的部分
有两张表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会对合并之后的数据去重