跳至内容

连接查询

连接(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
最后更新于