一、内联接(Inner Join):匹配2张表中相关联的记录。
1、隐式内连接。
select 字段列表 from 表1,表2 where 条件......;
示例:查询每一个员工的姓名以及关联的部门名称。
梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id
select emp.name,dept.name from emp,dept where emp.dept_id=dept.id;
给表起别名
select e.name,d.name from emp e,dept d where e.dept_id=d.id;
2、显示内连接。
select 字段列表 from 表1 [INNER]JOIN 表2 ON 连接条件......;
示例:查询每一个员工的姓名以及关联的部门名称。
梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id
#显示内连接中inner关键字可省略
select e.name,d.name from emp e inner join dept d on e.dept_id=d.id;
二、左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。
select 字段名称 from 表1 LEFT [OUTER] JOIN 表2 ON 条件......;
示例:查询emp表中的所有数据,和对应的部门信息。
梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id
select e.*,d.name from emp e LEFT [OUTER] JOIN dept d ON emp.dept_id=dept.id;
三、右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。
select 字段名称 from 表1 RIGHT [OUTER] JOIN 表2 ON 条件......;
#右外连接
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;
四、自连接:可以是内连接查询,也可以使外连接查询。
select 字段列表 from 表A 别名A JOIN 表A 别名B ON 条件......;
示例1:查询员工及其所属领导的名字。
select a.name,b.name from emp a,emp.b where a.managerid=b.id;
示例2:查询员工及其所属领导的名字,员工没有领导也要查出来。
select a.name ‘员工’,b.name ‘领导’ from emp a left join emp.b on a.managerid=b.id;