创建外部联接 (Visual Database Tools)

适用于:SQL Server

默认情况下, 查询和视图设计器工具(Visual Database Tools) 在表之间创建内部联接。 内连接会删除与其他表中的行不匹配的行。 外部联接会返回FROM子句中至少一个表或视图的所有行,只要这些行满足任何WHEREHAVING搜索条件。 如果要在结果集中包含在联接表中没有匹配项的数据行,可以创建外部联接。

创建外部联接时,表在 SQL 语句中显示的顺序(如 SQL 窗格中所示)非常重要。 添加的第一个表将成为“左”表,第二个表将成为“右”表。 (表在 “关系图”窗格中显示的实际顺序(Visual Database Tools) 并不重要。 当您指定左或右外部联接时,您是在指表被添加到查询中的顺序,以及它们在 SQL 窗格(Visual Database Tools) 中的 SQL 语句中出现的顺序。

创建外部联接

  1. 自动或手动创建联接。 有关详细信息,请参阅自动联接表(Visual Database Tools)手动联接表(Visual Database Tools)。

  2. 在“关系图”窗格中选择联接行,然后从 查询设计器 菜单中选择命令 从 <表名>选择所有行,该命令应包含要包含其额外行的表。

    • 选择第一个表以创建左外部联接。
    • 选择第二个表以创建右外部联接。
    • 选择这两个表以创建完整的外部联接。

指定外部联接时,查询和视图设计器将修改联接行以指示外部联接。

此外,查询和视图设计器修改 SQL 窗格中的 SQL 语句以反映联接类型的更改,如以下语句所示:

SELECT employee.job_id,
       employee.emp_id,
       employee.fname,
       employee.minit,
       jobs.job_desc
FROM employee
     LEFT OUTER JOIN jobs
         ON employee.job_id = jobs.job_id;

由于外部联接包含不匹配的行,因此可以使用它查找违反外键约束的行。 为此,请创建外部联接,然后添加搜索条件以查找最右侧表的主键列为 null 的行。 例如,以下外部联接查找employee表中没有在jobs表中对应行的行:

SELECT employee.emp_id,
       employee.job_id
FROM employee
     LEFT OUTER JOIN jobs
         ON employee.job_id = jobs.job_id
WHERE (jobs.job_id IS NULL);