组合where子句:
使用and操作符可以给where子句附加条件。
select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' and prod_price <= 4;
仅包含一个and至多能有2个过滤条件。每增加一个过滤条件,都要增加一个and连接。
OR操作符:它于AND操作符正好相反,它指示数据库检索匹配任一条件的行。
select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' or vend_id = 'BRS01';
求值顺序:sql在处理or操作符前,优先处理and操作符。即and操作符优先级大于or。
当我们需要列出价格为10美元以上,且由DLL01或BRS01制造的所有产品。按逻辑来写应为:
select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' or vend_id = 'BRS01'
and prod_price >= 10;
但结果却是错误的:
出来了那么多不符合要求的数据,这是因为优先级的问题,sql把这段语句理解为由BRS01制造的价格为10美元以上的所有产品,以及由DLL01制造的所有产品,且不管其价格如何。即先执行vend_id = 'BRS01' and prod_price >= 10语句导致错误结果。
更正,将or语句用括号括起来,优先执行:
select prod_id, prod_price, prod_name
from Products
where (vend_id = 'DLL01' or vend_id = 'BRS01')
and prod_price >= 10;
正确结果。
IN操作符:用来指定条件范围,范围中的每个条件都可以进行匹配。
select prod_id, prod_price, prod_name
from Products
where vend_id in ('DLL01', 'BRS01')
order by prod_name;
IN操作符完全可以完成与OR操作符相同的功能,而且使语句变得更加简洁。
同时与其他连接符操作时,使用IN操作符求值顺序更容易管理。
IN操作符一般比OR操作符执行的更快。IN还能包含其他的SELECT语句。
NOT操作符:NOT操作符用来否定其后所跟的任何条件。
select prod_name
from Products
where not vend_id = 'DLL01'
order by prod_name;
意为不为DLL01的全部检索出来,类似<>完成的操作。
相比NOT可以非常简单的找出与条件列表不匹配的行。