一、前言
本文将讲述有关于数据查询中的内连接的知识点
二、内连接
1.语法
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件 ··· ;
显示内连接
SELECT 字段列表 FROM 表1 [INNR]JOIN 表2 ON 连接条件 ··· ;
2.隐式内连接例子
查询每一个员工的姓名(name),以及关联的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)
- 连接条件是员工表内部门名称和部门表内部门名称相同:
emp.dept_id = dept.id
- 查询对象:
emp.name
和dept.name
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
3.显式内连接例子
查询每一个员工的姓名(name),以及关联的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)
- 连接条件是员工表内部门名称和部门表内部门名称相同:
emp.dept_id = dept.id
- 查询对象:
emp.name
和dept.name
SELECT e.name,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
当然,此处的INNER可以省略不写
SELECT e.name,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
三、外连接
在内连接的例子中,其实会有小的弊端,假设数据中相同属性的部门名称,或者是员工表内部门名称为空的话,就无法通过内连接查询出所有的数据(NULL值无法匹配),会造成一定的误差,所以我们就需要用到外连接来弥补一下。接下来我们就来认识一下外连接
1.左外连接
1️⃣语法
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ··· ;
2️⃣举例
查询员工表中的所有数据,以及对应的部门名称(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)
- 连接条件是员工表内部门名称和部门表内部门名称相同:
emp.dept_id = dept.id
- 查询对象:
e.*
和d.name
- 由于查询的是员工表中所有数据,即左表所有数据,以及相同属性的列,所以使用左外连接
LEFT OUTER JOIN ··· ON
SELECT e.*,d.name FROM emp e LEFT OUTER JOIN dept d ON e.dept_id = d.id;
2.右外连接
1️⃣语法
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ··· ;
2️⃣举例
查询部门表中的所有数据,以及对应的员工信息(name);
(员工表:emp;部门表:dept;员工表内的部门名称:dept_id;部门表内部门名称:id)
- 连接条件是员工表内部门名称和部门表内部门名称相同:
emp.dept_id = dept.id
- 查询对象:
d.*
和e.name
- 由于查询的是部门表中所有数据,即右表所有数据,以及相同属性的列,所以使用右外连接
RIGHT OUTER JOIN ··· ON
SELECT d.*,e.name FROM emp e RIGHT OUTER JOIN dept d ON e.dept_id = d.id;
四、自连接
自连接查询可以是内连接查询,也可以是外连接查询
1.语法
SELECT 字段列表 FROM 表1 别名1 JOIN 表2 别名2 ON 条件
2.举例
我们给定一张表格,其中包含员工信息以及它领导的id,要求查询员工及其所属领导名字
emp
id | name | job | managerid |
001 | 王总 | 总裁 | NULL |
002 | 张三 | 项目经理 | 001 |
003 | 李四 | 后端开发 | 002 |
004 | 王五 | 后端开发 | 002 |
005 | 小美 | 产品经理 | 001 |
006 | 小红 | UI设计 | 005 |
007 | 小帅 | 实习生 | 003 |
008 | 小刘 | 实习生 | 004 |
009 | 小张 | 实习生 | 006 |
- 我们可以把这张表看成两张表:
表A
代表员工表
,表B
代表领导表
,两张表格通过managerid
来连接 - 注意相同属性的表达方式,A表是员工表,那么属性应该为
managerid
;B表是领导表,那么属性是B.id
SELECT A.name,B.name FROM emp A,emp B WHERE A.managerid = B.id
五、结语
在实际开发中,左外连接使用的频率更高,因为右外连接也可以变成左外连接(将两表顺序调换即可)接下来将讲述其它的连接方式