SQL必知必会(12) 组合WHERE子句 -小周
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-教程


SQL必知必会(12) 组合WHERE子句

发表时间:2009/8/3 8:23:33 评论(0) 浏览(6808)  评论 | 加入收藏 | 复制
   
摘 要:组合WHERE子句  
正 文:

5.1  组合Where子句

第4章中介绍的所有Where子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,SQL允许给出多个Where子句。这些子句可以两种方式使用,即:以AND子句的方式或OR子句的方式使用。

操作符(operator) 用来联结或改变Where子句中的子句的关键字。也称为逻辑操作符(logical operator)。

5.1.1  AND操作符

为了通过不止一个列进行过滤,可使用AND操作符给Where子句附加条件。下面的代码给出了一个例子:

此SQL语句检索由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格。这条Select语句中的Where子句包含两个条件,并且用AND关键字联结它们。AND指示数据库管理系统软件只返回满足所有给定条件的行。如果某个产品由供应商DLL01制造,但它的价格高于4美元,则不检索它。类似,如果产品价格小于4美元,但不是由指定供应商制造的也不被检索。这条SQL语句产生的输出如下:

AND  用在Where子句中的关键字,用来指示检索满足所有给定条件的行。

5.1.2  or操作符

OR操作符与AND操作符不同,它指示数据库管理系统软件检索匹配任一条件的行。事实上,许多DBMS在OR Where子句的第一个条件满足的情况下,不再计算第二个条件(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来)。

请看如下的Select语句:

此SQL语句检索由任一个指定供应商制造的所有产品的产品名和价格。OR操作符告诉DBMS匹配任一条件而不是同时匹配两个条件。如果这里使用的是AND操作符,则没有数据返回。这条SQL语句产生的输出如下:

OR  Where子句中使用的关键字,用来表示检索匹配任一给定条件的行。

5.1.3  计算次序

Where可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。

但是,组合AND和OR带来了一个有趣的问题。为了说明这个问题,来看一个例子。假如需要列出价格为10美元(含)以上且由DLL01或BRS01制造的所有产品。下面的Select语句使用AND和OR操作符的组合建立了一个Where子句:

请看上面的结果。返回的行中有4行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?原因在于计算的次序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。当SQL看到上述Where子句时,它理解为由供应商BRS01制造的任何价格为10美元以上的产品,或者由供应商DLL01制造的任何产品,而不管其价格如何。换句话说,由于AND在计算次序中优先级更高,操作符被错误地组合了。

此问题的解决方法是使用圆括号明确地分组相应的操作符。请看下面的Select语句及输出:

这条Select语句与前一条的唯一差别是,这条语句中,前两个条件用圆括号括了起来。因为圆括号具有较AND或OR操作符高的计算次序,DBMS首先过滤圆括号内的OR条件。这时,SQL语句变成了选择由供应商DLL01或BRS01制造的且价格都在10美元(含)以上的任何产品,这正是我们所希望的。

在Where子句中使用圆括号  任何时候使用具有AND和OR操作符的Where子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。

 

上一章  下一章


Access软件网交流QQ群(群号:198465573)
 
 相关文章
SQL必知必会(8)按列位置排序   【(美)Ben Forta 著  2009/7/29】
SQL必知必会(9)指定排序方向  【(美)Ben Forta 著  2009/7/30】
SQL必知必会(11)WHERE子句操作符   【(美)Ben Forta 著  2009/8/1】
SQL必知必会(13) IN操作符   【(美)Ben Forta 著  2009/8/4】
SQL必知必会(14)NOT操作符  【(美)Ben Forta 著  2009/8/5】
常见问答
技术分类
相关资源
文章搜索
关于作者

小周

文章分类

文章存档

友情链接