直接查询两个表,会出现很多数据,称之为笛卡尔积
select * from emp,dept;
为了得到需要的数据,去除多余笛卡尔积,需要加上限制
select * from emp,dept where dept_id=dept.id;
内连接
查询两个表的重合交际部分
select emp.name,dept.name from emp,dept where dept_id=dept.id; -- 隐式内连接
select emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id; -- 显式内连接
查询结果
外连接
写在前面是左表,写在后面是右表
select emp.*,dept.name from emp left join dept on emp.dept_id = dept.id;
-- 左外连接 查询左表所有数据,包含左右表重合部分
select dept.*,emp.name from emp right join dept on dept.id = emp.dept_id;
-- 右外连接 查询右表所有数据,包含左右表重合部分
左外连接结果
右外连接结果
自连接
自己连接自己,可以是内连接,也可以是外连接
内连接
-- 查询员工及所属领导的名字
select a.name,b.name from emp a ,emp b where a.managerid=b.id;
-- 自连接,隐式内连接
select a.name,b.name from emp a inner join emp b on a.managerid=b.id;
-- 自连接显式内连接
结果:
左外连接
-- 查询所有员工及所属领导的名字,如员工没有领导也需要查询出来
select a.name,b.name from emp a left join emp b on a.managerid=b.id; -- 左外连接
结果: