查询结果可包含来自多个表或表值对象的数据。若要组合来自多个表值对象的数据,可使用 SQL 的 JOIN 操作。
自动联接表
当将两个或多个表添加到查询中时,查询和视图设计器会尝试确定它们是否相关。如果相关,查询和视图设计器自动在表示表或表结构对象的矩形之间添加联接线。
如果满足下列条件,查询和视图设计器将表识别为联接的表:
-
数据库包含指定该表是相关的信息。
-
如果两个表中各自的一列具有相同的名称和数据类型。该列必须至少在一个表中是主键。例如,假设添加 employee 和 jobs 表,如果 job_id 列是 jobs 表的主键,并且每个表中都有一个名为 job_id 的列,且具有相同的数据类型,那么查询和视图设计器将自动联接这两个表。
-
查询和视图设计器检测到搜索条件(WHERE 子句)实际上就是联接条件。例如,可以添加表 employee 和 jobs,然后创建一个搜索条件,搜索这两个表的 job_id 列中的相同值。当执行搜索时,查询和视图设计器检测到该搜索条件可导致联接,然后根据该搜索条件创建联接条件。
手动联接表
当向查询中添加两个或更多表时,查询和视图设计器将尝试根据公共数据或数据库中存储的关于这些表如何相关的信息来联接它们。有关详细信息,请参见如何:自动联接表。但是,如果查询和视图设计器未自动联接这些表,或者您希望在这些表之间创建其他联接条件,则可手动联接这些表。
除基于包含相同信息的列之外,还可以基于任意两列之间的比较创建联接。例如,如果数据库包含 titles 和 roysched 两个表,则可将 titles 表的 ytd_sales 列中的值与 roysched 表的 lorange 和 hirange 列中的值相比较。创建该联接将使您得以查找特定的书名,这些书截止到目前的年销售额位于版税的最高和最低范围之内。
创建外部联接
默认情况下,查询和视图设计器在表之间创建内部联接。如果要在结果集中包含在联接表无匹配项的数据行,可创建外部联接。
当创建外部联接时,表在 SQL 语句中出现的顺序(在 SQL 窗格中反映)非常重要。添加的第一个表成为“左”表,而第二个表成为“右”表。(表在“关系图”窗格中实际出现的顺序并不重要。)当您指定左外部联接或右外部联接时,引用的顺序是将这些表添加到查询中的顺序,以及它们在“SQL”窗格中的 SQL 语句中出现的顺序。
创建外部联接
当您指定外部联接时,查询和视图设计器将修改联接线以指示外部联接。
此外,查询和视图设计器将修改“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 |
因为外部联接包含不匹配的行,所以可使用它查找与外键约束冲突的行。为此,可创建一个外部联接,然后添加搜索条件以查找在最右侧表的主键列为空的行。例如,下列外部联接查找 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) 联接类型
|