Access 2003完整教程:在查询中手动创建自联接 (ADP)

背景信息

即使表在数据库中没有反身关系,也可以将表联接到它自身。例如,可以使用自联接查找居住在相同邮政编码地区的作者。

与其他类型的联接类似,自联接也需要至少两个表。区别是,自联接向查询中添加相同表的第二个实例,而不是向查询添加第二个表。这样,就可以比较该表第一个实例的一列与第二个实例中的相同列,也就可以使一列中的数据互相比较。“查询设计器”为表的第二个实例指定一个别名。

例如,如果想创建自联接,查找在 Berkeley 地区的所有作者,可以将该表第一个实例的city列与第二个实例中的city列相比较。使用的查询如下:

SELECT
 authors.au_fname,
 authors.au_lname,
 authors1.au_fname AS Expr2,
 authors1.au_lname AS Expr3
 FROM
 authors
 INNER JOIN
 authors authors1
 ON authors.city
 = authors1.city
 WHERE
 authors.city = 'Berkeley'

创建自联接经常需要多个联接条件。相关原因请考虑前面查询的结果:

Cheryl Carson Cheryl Carson
 Abraham Bennet Abraham Bennet
 Cheryl Carson Abraham Bennet
 Abraham Bennet Cheryl Carson

第一行没有意义;它指出 Cheryl Carson 与 Cheryl Carson 住在同一城市。第二行也没有意义。要消除这些无用的数据,可以添加另一个条件,只保存那些两个作者名表示不同作者的结果行。产生的查询如下所示:

SELECT
 authors.au_fname,
 authors.au_lname,
 authors1.au_fname AS Expr2,
 authors1.au_lname AS Expr3
 FROM
 authors
 INNER JOIN
 authors authors1
 ON authors.city
 = authors1.city
AND authors.au_id
 <> authors1.au_id
 WHERE
 authors.city = 'Berkeley'

结果集得到改进:

Cheryl Carson Abraham Bennet
 Abraham Bennet Cheryl Carson

但是两个结果行是冗余的。第一行说 Carson 与 Bennet 住在同一城市,第二行说 Bennet 与 Carson 住在同一城市。要消除这些冗余,可以将第二个联接条件从“not equals”改为“less than”。产生的查询如下所示:

SELECT
 authors.au_fname,
 authors.au_lname,
 authors1.au_fname AS Expr2,
 authors1.au_lname AS Expr3
 FROM
 authors
 INNER JOIN
 authors authors1
 ON authors.city
 = authors1.city
AND authors.au_id
 < authors1.au_id
 WHERE
 authors.city = 'Berkeley'

结果集如下所示:

Cheryl Carson Abraham Bennet

手动创建自联接

  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. 再次添加相同的表,使图表窗格中两次显示相同的表、视图或函数。

    通过为表名添加一个顺序编号,“查询设计器”为表的第二个实例指定一个别名。并且,“查询设计器”在图表窗格中表、视图或函数的两个实例间创建联接线。

  4. 用鼠标右键单击联接线,从快捷菜单中选择“属性”命令,然后按需要更改主键之间的比较运算符。例如,可以将运算符改为小于号(<)。
  5. 创建附加联接关系(例如,authors.zip = authors1.zip),方法是,将表、视图或函数的第一个实例中的主联接列的名称拖放到第二个实例中对应列处。
  6. 为查询指定其他选项,例如输出列、搜索条件以及排序次序。

上页: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号