连接查询
连接(JOIN)根据各数据库表之间的逻辑关系,从两个或多个表中检索数据。这篇讲内连接、多表连接、自连接、外连接和交叉连接。
连接的前提
- 所要连接的表必须拥有相同含义的字段值,且数据类型类似。
- 尽量在表的主键基础上指定连接条件。
连接分类:
- 内连接:基本内连接、多表连接、自连接。
- 外连接:左外连接、右外连接、全外连接。
- 交叉连接。
内连接
用 INNER JOIN … ON … 连接,只返回满足连接条件的行。JOIN 指定要连接的表,ON 指定连接条件(INNER 可省略)。
SELECT 字段1, 字段2, ……
FROM 表1 INNER JOIN 表2
ON 关联条件
GO多表连接
用于两个以上的表之间的查询:
SELECT … FROM 表1
JOIN 表2 ON 条件1
JOIN 表3 ON 条件2
JOIN 表4 ON 条件3
……组合键(主键)中的每一个字段都必须有相应的
ON子句。
自连接
自连接是一种特殊的内连接,用于查询同一个表中各行之间的关系,主要用于比较一个表中各记录之间的值。规范化的数据库中很少使用自连接。
SELECT a.姓名, b.姓名 AS 上级
FROM 员工表 a INNER JOIN 员工表 b
ON a.上级编号 = b.编号外连接
| 类型 | 结果值 |
|---|---|
LEFT OUTER JOIN | 左外连接(JOIN 左边的表),结果集除满足连接条件的行外,还包括左表的所有行 |
RIGHT OUTER JOIN | 右外连接(JOIN 右边的表),结果集除满足连接条件的行外,还包括右表的所有行 |
FULL OUTER JOIN | 全外连接,结果集除满足连接条件的行外,还包括两个表的所有行 |
SELECT 字段1, 字段2, …… 字段n
FROM 表1 LEFT OUTER JOIN 表2 -- 或 RIGHT OUTER JOIN / FULL OUTER JOIN
ON 关联条件
GO交叉连接
交叉连接返回被连接表中所有可能的记录组合(笛卡尔积)。例如一个表 8 条记录、另一个表 9 条记录,结果将返回 8×9 = 72 条记录。一般用于创建测试数据,或为清单、企业模板生成所有可能的组合。
SELECT 字段1, 字段2, ……
FROM 表1 CROSS JOIN 表2
GO最后更新于