Bootstrap

mysql数据库之内连接、左外连接、右外连接

一、内联接(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;

;