SQL 连接类型概述和示例

SQL JOIN 用于组合多个表并根据关系数据库中的公共字段检索数据 。
我们可以使用规范化来确保和提高数据的完整性 。在各种规范化形式中,数据被分布到多个逻辑表中 。这些表使用引用约束(主键和外键)来强制 SQL Server 表中的数据完整性 。
SQL JOIN 类型SQL连接通过组合多个关系表来生成一个数据集 。这些表使用键关联,具有一对一或一对多的关系 。要想得到正确的数据,必须了解数据要求和连接机制 。
SQL Server 支持多个连接,并且每种方法都有特定的方式从多个表中检索数据 。下图指定了支持的 SQL Server 连接 。

SQL 连接类型概述和示例

文章插图
SQL连接
内连接 INNER JOINSQL内连接产生一个满足连接条件的数据集,其中包括来自左表的行,来自右表的匹配行 。
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内连接示例
SQL自连接 SELF JOIN在SQL自连接中,SQL Server 将表与自身连接 。这意味着同一个表的名字在 from 子句中出现了两次 。
SQL 连接类型概述和示例

文章插图
SQL自连接
【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自连接示例
SQL交叉连接 CROSS JOIN交叉连接连接两个或多个不相关的表 。
CROSS JOIN 将第一个表 (T1) 中的每一行与第二个表 (T2) 中的每一行连接起来 。
换句话说,交叉连接返回两个表中行的笛卡尔积 。
SQL 连接类型概述和示例

文章插图
交叉连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
cross join branch

SQL 连接类型概述和示例

文章插图
交叉连接示例
如果第一个表有 x 行,第二个表有 n 行,则交叉连接在输出中给出 x*n 行 。
所以应该避免在较大的表上进行交叉连接,因为它可能会返回大量数据,这样的话数据库需要大量的计算能力(CPU、内存和 IO)来处理 。
SQL外连接 OUTER JOINSQL外连接时,不仅会列出匹配的行,还会返回其他表中不匹配的行 。不匹配的行取决于 关键字 left、right 或 full。
左外连接 LEFT OUTER JOINSQL左外连接返回两个表的匹配行以及左表中不匹配的行 。如果左表中的记录在右表中没有任何匹配的行,则显示具有 NULL 值的记录 。
SQL 连接类型概述和示例

文章插图
左外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
left join branch
on
employee.emp_id = branch.mgr_id

SQL 连接类型概述和示例

文章插图
左外连接 示例
右外连接 RIGHT OUTER JOINSQL右外连接返回两个表的匹配行以及右表中的不匹配行 。如果右表中的记录在左表中没有任何匹配的行,则显示具有 NULL 值的记录 。
SQL 连接类型概述和示例

文章插图
SQL右外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee
right join branch
on
employee.emp_id = branch.mgr_id

SQL 连接类型概述和示例

文章插图
SQL右外连接示例
全外连接 FULL OUTER JOIN完整外部联接在输出中返回以下行:
  • 两个表之间的匹配行 。
  • 类似于左外连接的不匹配行:右表中不匹配行的 NULL 值 。
  • 类似于右外连接的不匹配行:左表中不匹配行的NULL值 。

SQL 连接类型概述和示例

文章插图
全外连接
例子
select employee.emp_id, employee.first_name, branch.branch_name
from employee


推荐阅读