数据库基础(5)高级数据过滤

组合where子句:

使用and操作符可以给where子句附加条件。

select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' and prod_price <= 4;

数据库基础(5)高级数据过滤_第1张图片

仅包含一个and至多能有2个过滤条件。每增加一个过滤条件,都要增加一个and连接。

OR操作符:它于AND操作符正好相反,它指示数据库检索匹配任一条件的行。

select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' or vend_id = 'BRS01';

数据库基础(5)高级数据过滤_第2张图片

求值顺序: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;

但结果却是错误的:

数据库基础(5)高级数据过滤_第3张图片

出来了那么多不符合要求的数据,这是因为优先级的问题,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;

数据库基础(5)高级数据过滤_第4张图片

正确结果。

IN操作符:用来指定条件范围,范围中的每个条件都可以进行匹配。

select prod_id, prod_price, prod_name
from Products
where vend_id in ('DLL01', 'BRS01')
order by prod_name;

数据库基础(5)高级数据过滤_第5张图片

IN操作符完全可以完成与OR操作符相同的功能,而且使语句变得更加简洁。

同时与其他连接符操作时,使用IN操作符求值顺序更容易管理。

IN操作符一般比OR操作符执行的更快。IN还能包含其他的SELECT语句。

NOT操作符:NOT操作符用来否定其后所跟的任何条件。

select prod_name
from Products
where not vend_id = 'DLL01'
order by prod_name;

数据库基础(5)高级数据过滤_第6张图片

意为不为DLL01的全部检索出来,类似<>完成的操作。

相比NOT可以非常简单的找出与条件列表不匹配的行。

你可能感兴趣的:(sql)