返回首页
当前位置: 主页 > 其他教程 > Access教程 >

Access 合并搜索条件的规则和网格窗格约定

时间:2014-02-13 15:21来源:Office教程学习网 www.office68.com编辑:麦田守望者

可以创建包含任意数量搜索条件的查询,这些条件用任意数量的 AND 和 OR 运算符相链接。组合了 AND 和 OR 子句的查询会很复杂,所以有必要了解在执行这种查询时查询被解释的方式,以及这种查询在“网格”和 SQL 窗格中是如何表示的。

为便于理解下面的讨论,假设正在处理包含有hire_date、job_lvl和status列的employee表。该示例假定用户需了解诸如某雇员在公司里工作了多久(也就是了解该雇员的雇佣日期)、该雇员从事何种工作(也就是岗位级别)以及该雇员的状态(例如,是否退休)等信息。

AND 和 OR 运算符的优先级

当执行一个查询时,它会首先计算用 AND 运算符链接的子句,然后计算用 OR 运算符链接的子句。

注释NOT 运算符的优先级比 AND 和 OR 都高。

例如,为了找出在低级岗位上为公司工作了五年以上的雇员以及不论工作年限长短在中级岗位上的雇员,可以构建如下 WHERE 子句:

WHERE hire_date < '01/01/90' AND job_lvl = 100 OR job_lvl = 200
若要覆盖默认的 AND 比 OR 优先级高的约定,可以在 SQL 窗格中将特定条件两边加上括号。括号中的条件总是先计算。例如,为了找出在低级或中级岗位为公司工作了五年以上的所有雇员,可以构建如下 WHERE 子句:

WHERE hire_date < '01/01/90' AND(job_lvl = 100 OR job_lvl = 200)
提示

为使优先级结构清楚,建议在组合使用 AND 和 OR 子句时总是使用括号,而不要依赖于默认的优先级。

AND 子句与多个 OR 子句一起使用的方式

理解 AND 和 OR 子句的组合方式,有助于在“查询设计器”中构建和理解复杂的查询。

如果用 AND 链接了多个条件,则与 AND 链接的第一组条件会应用于第二组中的所有条件上。换句话说,用 AND 链接到另一个条件的条件,会分配给第二组中的所有条件。例如,下列示意的表达方式显示了一个链接到一组 OR 条件的 AND 条件:

A AND (B OR C)
上述表达方式与下列示意的表达方式在逻辑上等价,而下面的表达式显示了 AND 条件是如何分配给第二组中的条件的:

(A AND B) OR (A AND C)
这种分配原则影响“查询设计器”的使用方式。例如,假设要查找所有在低级或中级岗位为公司工作了五年以上的雇员。您可以在 SQL 窗格的语句中输入如下 WHERE 子句:

WHERE (hire_date < '01/01/90' ) AND (job_lvl = 100 OR job_lvl = 200)
用 AND 运算符链接的子句应用于使用 OR 运算符链接的两个子句。更清楚的等价表达方式是对 OR 子句中的每个条件均重复 AND 条件。下面的语句比上一语句逻辑关系更清楚(也更长),但是逻辑上是等价的:

WHERE (hire_date < '01/01/90' ) AND (job_lvl = 100) OR (hire_date < '01/01/90' ) AND (job_lvl = 200)
将 AND 子句分配给链接的所有 OR 子句的分配原则,适用于牵涉到的任意多单一条件。例如,假设想找出所有在高级或中级岗位为公司工作了五年以上或已退休的雇员。WHERE 子句可能如下所示:

WHERE (job_lvl = 200 OR job_lvl = 300) AND (hire_date < '01/01/90' ) OR (status = 'R')
分配了用 AND 链接的条件之后,WHERE 子句可能如下所示:

WHERE (job_lvl = 200 AND hire_date < '01/01/90' ) OR (job_lvl = 200 AND status = 'R') OR (job_lvl = 300 AND hire_date < '01/01/90' ) OR (job_lvl = 300 AND status = 'R')
在“网格”窗格中如何表示多个 AND 和 OR 子句

“查询设计器”在“网格”窗格中表达搜索条件。但是,对于包含用 AND 和 OR 链接的多个子句的条件,“网格”窗格中的表达方式可能与预想的不一样。另外,如果在“网格”或“图表”窗格中修改查询,则会发现 SQL 语句与所输入的会有所不同。

下面是 AND 和 OR 子句在“网格”窗格中显示的一般规则:

用 AND 链接的所有条件都显示在“准则”网格列中,或显示在同一“或?…”列中。
用 OR 链接的所有条件会分开显示在不同的“或?…”列中。
如果 AND 和 OR 子句的组合逻辑结果是将 AND 条件分配给几个 OR 子句,则“网格”窗格会重复必要数量的 AND 子句,以清楚地表达组合结果。
例如,在 SQL 窗格中可能创建如下的搜索条件,其中用 AND 链接的两个子句优先于用 OR 链接的第三个子句:

WHERE (hire_date < '01/01/90' )AND (job_lvl = 100)OR (status = 'R')
“查询设计器”在“网格”窗格中将这个 WHERE 子句表达如下:

 

但是,如果链接的 OR 子句具有比 AND 子句高的优先级,则对每个 OR 子句都会重复这个 AND 子句。这样,这个 AND 子句会分配给每个 OR 子句。例如,在 SQL 窗格中,可能创建如下 WHERE 子句:

WHERE (hire_date < '01/01/90' )AND ( (job_lvl = 100)OR (status = 'R') )
“查询设计器”在“网格”窗格中将这个 WHERE 子句表达如下:

 

如果链接的 OR 子句只涉及一个数据列,则“查询设计器”会将整个 OR 子句放在该网格的单个单元格中,从而避免重复使用 AND 子句。例如,在 SQL 窗格中,可能创建如下 WHERE 子句:

WHERE (hire_date < '01/01/90' )AND ((status = 'R')OR(status = 'A'))
“查询设计器”在“网格”窗格中将这个 WHERE 子句表达如下:

 

如果更改了查询(例如,在“网格”窗格中更改了一个值),“查询设计器”会在 SQL 窗格中重新创建这个 SQL 语句。重新创建的 SQL 语句会类似于“网格”窗格的显示,而与原来的语句有所不同。例如,如果“网格”窗格中包含要分配的 AND 子句,则 SQL 窗格中的生成语句会用明确分配的 AND 子句重新创建。
 

------分隔线----------------------------
标签(Tag):access access数据库 数据库 access视频教程 access教程 access技巧 access下载
------分隔线----------------------------
推荐内容
猜你感兴趣