Skip to content

多表连接分类

连接查询分类

  • 内连接:相当于查询 A,B 交集部分数据

  • 外连接

  • 左外连接:查询左表所有数据,以及两张表交集部分数据

  • 右外连接:查询右表所有数据,以及两张表交集部分数据

  • 自连接:当前表与自身的连接查询,自连接必须使用表别名

  • 子查询

(1) 内连接

内连接的语法分成两种: 隐式链接和显式链接

隐式链接

sql
SELECT 字段列表 FROM 表1,表2 WHERE 条件;

显式链接

SQL
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

案例

  • 查询每一个员工的姓名,以及关联的部门的名称(隐式内链接实现)

表结构: emp, dept

连接条件: emp.dept_id = dept.id

sql

select emp.name,dept.name from emp,dept where emp.dept_id = dept.id;

-- 为没一张表起别名,简化SQL编写

select e.name,d.name from emp e,dept d where e.dept_id = d.id;

-- 这里注意使用了别名 以后都得用别名了
  • 查询每一个员工的姓名,以及关联的部门名称(显式内连接实现)

表结构: emp, dept

连接条件: emp.dept_id = dept.id

sql
SELECT e.name,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;

-- 为每一张表起别名,简化SQL编写
SELECT e.name,d.name FROM emp e JOIN dept d ON e.dept_id = d.id;

警告

  • table as 别名 1,table as 别名 2

  • table 别名 1,table 别名 2

  • 一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段

外连接

外连接分为两种:分别是左外连接和右外连接,具体语法结构为:

左外连接

sql
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

左外连接相当于查询表 1(左表)的所有数据,当然也包含表一和表二交集部分的数据

右外连接

sql
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

右外连接相当于查询表 2(右表)的所有数据,当然也包含表一和表二交集部分的数据

案例

  • 查询 emp 表的所有数据和对应的部门信息

由于需求中提到,要查询 emp 的所有数据,所以是不能内连接查询的,需要考虑外连接查询

表结构 emp ,dept

连接条件 emp.dept_id = dept.id

sql

SELECT e.*,d.name FROM emp e left outer join dept d on e.dept_id = d.id;

SELECT e.*,d.name FROM emp e left join dept d on e.dept_id = d.id;
  • 查询 dept 表的所有数据和对应的员工信息(右外连接)

由于需求中提到 要查询 dept 表的所有数据,所以是不能内连接查询的.需要考虑外连接查询

表结构: emp,dept

连接条件: emp.dept_id = dept.id

sql
SELECT e.*,d.name FROM emp e right outer join dept d on e.dept_id = d.id;

SELECT e.*,d.name FROM emp e right join dept d on e.dept_id = d.id;

警告

注意事项:

  • 左外连接和右外连接是可以相互替换的,只需要调整在连接查询时,哪个是左表哪个是右表即可

  • 左外连接和右外连接的效果是不同的

  • 我们日常开发的时候,更偏向于左外连接