适用于:SQL Server
默认情况下, 查询和视图设计器工具(Visual Database Tools) 在表之间创建内部联接。 内连接会删除与其他表中的行不匹配的行。 外部联接会返回FROM
子句中至少一个表或视图的所有行,只要这些行满足任何WHERE
或HAVING
搜索条件。 如果要在结果集中包含在联接表中没有匹配项的数据行,可以创建外部联接。
创建外部联接时,表在 SQL 语句中显示的顺序(如 SQL 窗格中所示)非常重要。 添加的第一个表将成为“左”表,第二个表将成为“右”表。 (表在 “关系图”窗格中显示的实际顺序(Visual Database Tools) 并不重要。 当您指定左或右外部联接时,您是在指表被添加到查询中的顺序,以及它们在 SQL 窗格(Visual Database Tools) 中的 SQL 语句中出现的顺序。
创建外部联接
自动或手动创建联接。 有关详细信息,请参阅自动联接表(Visual Database Tools)或手动联接表(Visual Database Tools)。
在“关系图”窗格中选择联接行,然后从 查询设计器 菜单中选择命令 从 <表名>选择所有行,该命令应包含要包含其额外行的表。
- 选择第一个表以创建左外部联接。
- 选择第二个表以创建右外部联接。
- 选择这两个表以创建完整的外部联接。
指定外部联接时,查询和视图设计器将修改联接行以指示外部联接。
此外,查询和视图设计器修改 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);