Access 2003完整教程:在查询中创建外部联接 (ADP)

注释本主题中的信息仅适用于 Microsoft Access 项目 (.adp)。

默认情况下,“查询设计器”在表之间创建内部联接。如果想在结果集中包含某些数据行,而这些行在联接的表中没有相匹配的行,可以创建外部联接。

当创建外部联接时,表在 SQL 语句中出现的顺序非常重要。所添加的第一个表成为“左”表,第二个表成为“右”表。(表在“图表”窗格中出现的顺序并不重要。)当指定左或右外部联接时,可参照这些表添加到查询中的顺序以及表在“SQL”窗格的 SQL 语句中出现的顺序。

创建外部联接

  1. 创建联接。

    操作方法:

    当您向查询中添加两个或多个表时,“查询设计器”将根据公共数据或数据库中储存的如何使表相关的信息,尝试联接表。(有关详细信息,请参阅自动联接表。但是,如果“查询设计器”没有自动联接表,或者想在表之间创建附加的联接条件,可以手动联接表。

    可以根据任何两列之间(不只是包含相同信息的列之间)的比较创建联接。例如,如果数据库包含两个表titlesroysched,可以将titlesytd_sales列中的数据与roysched表的lorangehirange列中的数据进行比较。创建这个联接,可以查找到过去一年销售额在版税付款上下限之间的书目。

    提示

    如果联接条件中的列已创建了索引,那么联接会进行得最快。在某些情况下,联接一个未创建索引的列会导致一个非常慢的查询。

    1. 在“数据库”窗口中,单击“对象”下的“查询”按钮图像,再单击要打开的查询,然后单击“数据库”窗口工具栏上的“设计”
    2. 将想要联接的对象添加到“图表”窗格中。

      操作方法:

      当创建查询时,是从表、视图或函数中检索数据。如果要在查询中使用这些对象,可将其添加到“图表”窗格中。

      向查询中添加表、视图或用户定义函数

      1. 在“数据库”窗口中,单击“对象”下的“查询”按钮图像,再单击要打开的查询,然后单击“数据库”窗口工具栏上的“设计”
      2. 在“图表”窗格中,用右键单击背景,再从快捷菜单中选择“添加表”。
      3. 在“添加表”对话框中,选择“表”、“视图”或“函数”选项卡。
      4. 在列表中,双击要添加的项目。
      5. 在完成了对项目的添加后,请单击“关闭”按钮。

      “查询设计器”据此更新“图表”窗格、“网格”窗格、“SQL”窗格。

      可以拖动对象到“图表”窗格。可以从数据库窗口拖动表、视图或内嵌函数。

      可以从“数据库设计器”拖动列或表,或者从剪贴板粘贴。

      在“SQL”窗格的语句中引用表和视图时,它们会被自动添加到查询中。

      如果用户没有足够的权限,“查询”设计器不会显示表、视图或内嵌函数的数据列。这时,只会显示表、视图或内嵌函数的标题栏和“*(所有列)”复选框。

      向新查询中添加现有查询

      1. 如果需要,单击SQL按钮图像显示SQL窗格。
      2. 在“SQL”窗格中,在 FROM 后键入左右括号 ()。
      3. 为现有查询打开“查询设计器”。(现在有两个打开的“查询设计器”。)
      4. 显示内部查询(现有查询,新查询也称外部查询)的“SQL”窗格。
      5. 选取“SQL”窗格中的所有文本,并复制到剪贴板。
      6. 在新查询的“SQL”窗格中单击,使光标置于添加的括号中,并粘贴剪贴板的的内容。
      7. 在“SQL”窗格中,在右括号后,添加别名。有关 SQL 别名和子查询的详细信息,请参阅 Microsoft SQL Server 文档。
    3. 在第一个表、视图或函数中拖动联接列的名称,然后在第二个表、视图或函数中的相关列上将其放下。联接不能基于文本、ntext 或图像列。

      注释联接列必须具有相同(或兼容)的数据类型。例如,如果第一个表中的联接列是日期类型,则必须使该列与第二个表中的日期列关联。另一方面,如果第一个联接列是整型,则与其关联的联接列的数据类型也必须是整型,但是长度可以不同。“查询设计器”将不检查用于创建联接的列的数据类型,但是执行查询时,如果数据类型不兼容,数据库将显示错误信息。

    4. 如果必要,可以更改联接运算符;默认情况下,运算符是一个等号 (=)。

      操作方法:

      默认情况下,“查询设计器”使用等号(等联接)联接表,这种联接匹配两个联接列中的值。如果需要,可以更改用于比较联接列中值的运算符。

      1. 在“数据库”窗口中,单击“对象”下的“查询”按钮图像,再单击要打开的查询,然后单击“数据库”窗口工具栏上的“设计”
      2. 在“图表”窗格中,用鼠标右键单击想要修改的联接线,然后从快捷菜单中选择“属性”命令。
      3. 在“属性页”对话框的“联接线”选项卡中,从列表里选择一个新的运算符。

      注释可以更改“SQL”窗格的 SQL 语句中的运算符。

    “查询设计器”向“SQL”窗格的 SQL 语句添加一个 INNER JOIN 子句。

    在“图表”窗格中选定连接线,然后从“查询”菜单或快捷菜单中选择“从表中选择所有行”命令,选择包含了某个表的命令,您想要包含该表中附加的行。

    – 或者 –

    在“图表”窗格中,用鼠标右键单击想要改为外部联接的连接线,然后从快捷菜单中选择“属性”命令。在“属性”对话框的“连接线”选项卡的“包含行”下,选择选项以指定想在该表中包含的所有行。

    • 选择第一个表创建左外部联接。
    • 选择第二个表创建右外部联接。
    • 选择两个表创建全外部联接。

当指定一个外部联接时,“查询设计器”会修改连接线来指明一个外部联接。

此外,“查询设计器”会在“SQL”窗格中修改语句,以反映联接类型的更改,如下列语句所示:

SELECT employee.job_id, employee.emp_id,
   employee.fname, employee.minit, jobs.job_desc
FROM employeeLEFT OUTER JOINjobs 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)

上页:Access 2003完整教程:创建生成表查询 (ADP) 下页:Access 2003完整教程:创建表间的关系 (ADP)

Access 2003完整教程:在查询中创建外部联接 (ADP)

Access 2003完整教程:创建表间的关系 (ADP)Access 2003完整教程:在查询中手动创建自联接 (ADP)
Access 2003完整教程:创建子查询 (ADP)Access 2003完整教程:在查询中创建表别名 (ADP)
Access 2003完整教程:创建触发器 (ADP)Access 2003完整教程:创建唯一约束 (ADP)
Access 2003完整教程:创建唯一索引 (ADP)Access 2003完整教程:创建更新查询 (ADP)
Access 2003完整教程:关于检查约束表达式 (ADP)Access 2003完整教程:定义主键约束 (ADP)
Access 2003完整教程:删除检查约束 (ADP)Access 2003完整教程:从表中删除列 (ADP)
Access 2003完整教程:删除索引 (ADP)Access 2003完整教程:删除关系 (ADP)
Access 2003完整教程:从数据库中删除表 (ADP)Access 2003完整教程:删除触发器 (ADP)
Access 2003完整教程:绘制反身关系 (ADP)Access 2003完整教程:复制表 (ADP)
Access 2003完整教程:实施表之间的参照完整性 (ADP)Access 2003完整教程:在查询中排除重复的行 (ADP)
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号