这一课讲授如何组合where子句建立功能更强,更高级得搜索条件。
学习使用not和in操作符。
5.1 组合where子句
SQL允许给出多个where子句,有两种使用方式,and子句或or子句。
操作符(operator)或逻辑操作符(logical operator):
用来联结或改变where子句中的子句的关键字。
5.1.1 and操作符
通过不止一个列进行过滤,使用and操作符给where子句附加条件。
and:用在where子句中的关键字,用来指示检索满足所有给定条件的行。
一个and子句,只过滤两个条件,增加多个过滤条件,每个条件间都要使用and关键字。
5.1.2 or 操作符
许多DBMS在or where子句的第一个条件得到满足的情况下,就不再计算第二个条件了(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来)
or:where子句中使用的关键字,用来检索匹配任一给定条件的行。
5.1.3 求值顺序
where子句可以包含任意数目的and和or操作符,允许两者结合以进行复杂,高级的过滤。
返回的行中有4行价格小于10美元,没有按预期过滤!!!
原因:求值顺序,优先处理and操作符,再处理or操作符。这个例子SQL理解为“由供应商brs01制造的价格为10美元以上的所有产品,以及由供应商dll01制造的所有产品,而不管其价格如何”。
解决方法:使用圆括号对操作符进行明确分组。
优先级:
() > and > or
5.2 in操作符
用来指定条件范围,范围中的每个条件都可以进行匹配。in取一组由逗号分隔,括在圆括号中的合法值。如下例:
猜测:in操作符完成与or相同的功能!!!
1. in操作符语法更加清楚,更直观; |
2. 在与and和or操作符组合使用in时,求值顺序更容易管理; |
3. in操作符一般比一组or操作符执行得更快; |
4. in最大得优点是可以包含其他select语句,能够更动态地建立where子句。 |
in:where子句中用来指定要匹配值的清单的关键字,功能与or相当。
5.3 not操作符
not操作符有且只有一个功能——否定其后所跟的任何条件。
not从不单独使用。
not关键字可以用在要过滤的列前,而不仅是在其后。
not:where子句中用来否定其后条件的关键字。
DBMS匹配非dll01之外的所有东西。
或等价使用不等于<>(或者!=)操作符: