SQL高级数据过滤
一, 组合where子句
为了进行更强的过滤控制,sql允许给出多个where子句。这些子句有两种使用方式,即以and子句或or子句的方式使用。
1. and操作符
要通过不止一个列进行过滤,可以使用and操作符给where子句附加条件。
Select prod_id,prod_price,prod_name from Products where vend_id = ‘DLL01’ and prod_price <= 4;
2. or操作符
or操作符与and操作符正好相反,它指示DBMS检索匹配任一条件的行。事实上,许多DBMS在or where子句的第一个条件得到满足的情况下,就不再计算第二个条件了(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来)。
Select prod_name,prod_price from Products where vend_id = ‘DLL01’ or vend_id = ‘BRS01’;
3. 求值顺序
Where子句可以包含任意数目的and和or操作符。允许两者结合以进行复杂,高级的过滤。
举个例子,假如需要列出价格为10美元及以上,且由DLL01或BRS01制造的所有产品。
Select prod_name,prod_price from Products where vend_id=’DLL01’ or vend_id=’BRS01’ and prod_price >= 10;
或这样写(加上括号比较直观)
Select prod_name,prod_price from Products where (vend_id=’DLL01’ or vend_id=’BRS01’) and prod_price >= 10;
4. in操作符
in操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in取一组由逗号分隔,括在圆括号中的合法值。
Select prod_name,prod_price from Products where vend_id in (‘DLL01’,’BRS01’) order by prod_name;
5. 为什么使用in操作符?优点?
(1) 有在很多合法选项时,in操作符的语法更清楚,更直观。
(2) 在与其他and和or操作符组合使用in时,求值顺序更容易管理。
(3) in操作符一般比一组or操作符执行得更快
(4) in的最大优点是可以包含其他select语句,能够更动态的建立where子句。
6. not操作符
where子句中的not操作符有且只有一个功能,那就是否定其后跟的任何条件。因为not从不单独使用(它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同。not关键字可以用在要过滤的列前,而不仅是在其后。
Not:where子句中用来否定其后条件的关键字。
举个例子:列出除DLL01之外的所有供应商制造的产品。
Select prod_name from Products where not vend_id=’DLL01’ order by prod_name;
或
Select prod_name from Products where vend_id <> ‘DLL01’ order by prod_name;
这样查询的结果是一样的。
7. 为什么使用not?
对于简单的where子句,使用not确实没有什么优势,但是在更复杂的子句中,not是非常有用的。在与in操作符联合使用时,not可以非常简单地找出与条件列表不匹配的行。