适用于:SQL Server
默认情况下,查询和视图设计器 在表之间创建内部联接。 内连接会排除那些与其他表中的行不匹配的行。 不过,外部连接会返回FROM子句中至少一个表或视图中的所有行,只要这些行满足任何WHERE或HAVING筛选条件。 如果希望在结果集中包括那些在联接的表中没有匹配的数据行,可以创建外连接。
创建外部联接时,表在 SQL 语句中显示的顺序(如 SQL 窗格中所示)非常重要。 添加的第一个表将成为“左”表,第二个表将成为“右”表。 (表在“关系图”窗格中显示的实际顺序 不重要。指定左或右外部联接时,指的是表添加到查询的顺序,以及表在 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)