create table dept( id int primary key auto_increment, name varchar(20) );
insert into dept values(null, ‘财务部‘); insert into dept values(null, ‘人事部‘); insert into dept values(null, ‘科技部‘); insert into dept values(null, ‘销售部‘);
create table emp( id int primary key auto_increment, name varchar(20), dept_id int );
insert into emp values(null, ‘张三‘, 1); insert into emp values(null, ‘李四‘, 2); insert into emp values(null, ‘老王‘, 3); insert into emp values(null, ‘刘能‘, 5);
需求:查询出部门信息和部门所对应的员工信息
两张表相乘得出来的结果:select * from dept, emp;
如果左边表有m条记录,右边有n条记录,则查询出来的结果就是m*n条。这些查询结果中包含大量错误的结果,通常不会使用这种查询。
左边表有且右边表也有的记录
SQL:select * from dept d inner join emp e on e.dept_id=d.id;
查询出部门所对应的员工信息, 同时列出那些没有员工的部门
SQL:select * from dept d left join emp e on e.dept_id=d.id;
查询出部门所对应的员工信息, 同时列出那些没有部门的员工
SQL:select * from dept d right join emp e on e.dept_id=d.id;
查询出部门所对应的员工信息,同时列出那些没有员工的部门及些没有部门的员工
SQL:select * from dept d full join emp e on e.dept_id=d.id;(错误:mysql不支持全外连接查询)
通过union关键字来模拟全外连接查询
SQL:
select * from dept left join emp on emp.dept_id = dept.id
union
select * from dept right join emp on emp.dept_id = dept.id;
原文:https://www.cnblogs.com/rmxd/p/11416328.html