SQL JOIN 用于组合多个表并根据关系数据库中的公共字段检索数据。

我们可以使用规范化来确保和提高数据的完整性。 在各种规范化形式中,数据被分布到多个逻辑表中。 这些表使用引用约束(主键和外键)来强制 SQL Server 表中的数据完整性。
SQL JOIN 类型
SQL连接通过组合多个关系表来生成一个数据集。 这些表使用键关联,具有一对一或一对多的关系。 要想得到正确的数据,必须了解数据要求和连接机制。
SQL Server 支持多个连接,并且每种方法都有特定的方式从多个表中检索数据。 下图指定了支持的 SQL Server 连接。
SQL连接
内连接 INNER JOIN
SQL内连接产生一个满足连接条件的数据集,其中包括来自左表的行,来自右表的匹配行。
SQL内连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
inner join branch
on employee.emp_id = branch.mgr_id
SQL内连接示例
SQL自连接 SELF JOIN
在SQL自连接中,SQL Server 将表与自身连接。 这意味着同一个表的名字在 from 子句中出现了两次。
SQL自连接
例子
select e.emp_id, e.first_name, m.first_name, m.emp_id
from employee e
inner join employee m
on m.emp_id = e.super_id
SQL自连接示例
SQL交叉连接 CROSS JOIN
交叉连接连接两个或多个不相关的表。
CROSS JOIN 将第一个表 (T1) 中的每一行与第二个表 (T2) 中的每一行连接起来。
换句话说,交叉连接返回两个表中行的笛卡尔积。
交叉连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
cross join branch
交叉连接示例
如果第一个表有 x 行,第二个表有 n 行,则交叉连接在输出中给出 x*n 行。
所以应该避免在较大的表上进行交叉连接,因为它可能会返回大量数据,这样的话数据库需要大量的计算能力(CPU、和 IO)来处理。
SQL外连接 OUTER JOIN
SQL外连接时,不仅会列出匹配的行,还会返回其他表中不匹配的行。 不匹配的行取决于 关键字 left、right 或 full 。
左外连接 LEFT OUTER JOIN
SQL左外连接返回两个表的匹配行以及左表中不匹配的行。 如果左表中的记录在右表中没有任何匹配的行,则显示具有 NULL 值的记录。
左外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
left join branch
on
employee.emp_id = branch.mgr_id
左外连接 示例
右外连接 RIGHT OUTER JOIN
SQL右外连接返回两个表的匹配行以及右表中的不匹配行。 如果右表中的记录在左表中没有任何匹配的行,则显示具有 NULL 值的记录。
SQL右外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
right join branch
on
employee.emp_id = branch.mgr_id
SQL右外连接示例
全外连接 FULL OUTER JOIN
完整外部联接在输出中返回以下行:
- 两个表之间的匹配行。
- 类似于左外连接的不匹配行:右表中不匹配行的 NULL 值。
- 类似于右外连接的不匹配行:左表中不匹配行的NULL值。
全外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
full join branch
on
employee.emp_id = branch.mgr_id
全外连接
NULL 值和 SQL 连接
假设我们在表列中有 NULL 值,并且我们在这些列上连接表。 SQL Server 是否匹配 NULL 值?
NULL 值彼此不匹配。 因此,SQL Server 无法返回匹配的行。
胜象大百科









