练习 1.4:添加连接、查询条件和 GROUP BY 子句
在开始之前,必须完成练习 1.3:指定结果列。
在本练习中,通过执行下列步骤限定查询:
- 将查询结果限制为当前租借录像带的客户和当前被借走的录像带。
- 将查询结果限制为运行查询时指定其姓名的特定客户。
- 按借出的录像带到期的时间(星期几)、对每一天按录像带的名称以及对每个录像带按客户姓名来组织查询结果。
连接表
连接操作允许您根据匹配的列值检索两个或多个表中的数据。各个表中的数据链接至单个结果。此查询需要两个连接。查询结果需要包括具有匹配的 CUST_ID 列值的 RENTALS 表项和 CUSTOMERS 表项。查询结果还必须包括具有匹配的录像带标识 (VID_ID 列值)的 RENTALS 表项和 VIDEOScolumn 表项。
- 在“表”窗格中,右键单击 R 表的标题,然后在弹出菜单上单击创建连接。
- 在“创建连接”窗口中,在源下面,作出下列选择:
- 在表(别名)列表中,单击 RENTALS (R)。
- 在列列表中,单击 CUST_ID。
- 在目标下面,作出下列选择:
- 在表(别名)列表中,单击 CUSTOMERS (C)。
- 在列列表中,单击 CUST_ID。
- 单击确定。这两个列之间就出现一个连接符。
- 在“表”窗格中,将指针从 R (RENTALS) 表中的 VID_ID 列拖到 V (VIDEOS) 表中的 VID_ID 列。
查看“SQL 源代码”窗格,以观察源代码中的连接:
WHERE
R.CUST_ID = C.CUST_ID
AND R.VID_ID = V.VID_ID
在“表”窗格中,已经创建了这两个连接,如下所示:

通过右键单击连接符并在弹出菜单上单击指定连接类型,然后在“指定连接”窗口中选择想要的连接类型,可以在“表”窗格中更改连接类型(例如,从缺省内连接更改为左外连接、右外连接或全部外连接)。
创建查询条件
接下来,查询需要查询条件,以便仅抽取具有您想要的客户姓名的结果行。通过使用“设计”窗格中的“条件”页,对查询添加条件。
- 单击条件选项卡以查看“条件”页。
- 双击列列,然后单击列表中的 C.NAME。
- 双击运算符列,然后单击 = 运算符。
- 双击值列,然后输入 :custName。冒号后面跟着一个变量名是 SQL 的语法,运行查询时,该变量将被一个值替换。运行 SQL 查询时,可以看到这是如何进行的。
“条件”页现在看起来类似于下图:

添加 GROUP BY 子句
将分别按星期几、名称和客户姓名对查询进行分组。要在“SQL 构建器”中创建 GROUP BY 子句,使用“设计”窗格中的“组”页。在此视图中,还可以通过使用列表达式、嵌套组、分组集(仅在 DB2 通用数据库中)以及 ROLLUP 和 CUBE 分组函数(在 Oracle 和 DB2 通用数据库中),在查询结果中创建更多高级分组。
- 在“设计”窗格中,单击组选项卡。
- 添加 DAYOFWEEK 函数作为结果列。
- 在列表中,双击第一行,单击列表中的构建表达式,然后按 Enter 键。
- 在向导的“表达式构建器”页中,单击函数。“函数表达式构建器”页打开。
- 在选择函数类别列表中,单击日期和时间。
- 在选择函数列表中,单击 DAYOFWEEK。
- 在选择函数特征符列表中,单击 DAYOFWEEK(DATE) --> INTEGER。
该函数特征符表示函数需要一个自变量。
- 在自变量表的值列中,单击单元格,单击列表中的 R.DATE,然后按 Enter 键。
- 单击完成。DAYOFWEEK 函数就显示在列表的第一个单元格中。
- 在列表的第二行中,从列表中选择 V.TITLE 列,然后在第三行中选择 C.NAME。“组”页现在看起来类似于下图:

现在,查询就完成了。查询在“SQL 构建器”中类似于下图:

现在,您可以开始进行练习 1.5:运行 SQL 查询了。