05 高级数据过滤

组合WHERE子句以建立功能更强、更高级的搜素条件。

1.组合WHERE子句

为了实现更强的过滤控制,SQL允许给出多个WHERE子句。这些子句有两种使用方式,即以操作符ANDOR进行联结或改变。

(1)AND操作符

用来指示检索满足所有给定条件的行。

输入:

SELECT prod_id, prod_price, prod_name

FROM Products

WHERE vend_id = 'DLL01' AND prod_price <= 4;

SQL语句检索由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格。

输出:

可以增加多个过滤条件,每个条件间都要使用AND关键字。

(2)OR操作符

用来只是DBMS检索匹配任一条件的行。第一个条件满足时,不管第二个条i安是否满足,相应的行都将被检索出来。

输入:

SELECT prod_name, prod_price

FROM Products

WHERE vend_id = 'DLL01' OR vend_id ='BRS01';

SQL语句检索由任一指定供应商制造的所有产品的产品名和价格。

输出:

(3)求值顺序

AND在求值过程中优先级更高,在使用具有ANDOR操作符的WHERE子句时,都应该使用圆括号对操作符进行明确分组。

当需要列出价格为10美元及以上,且由DLL01BRS01制造的所有产品时,若未使用圆括号进行分组,输入:

SELECT prod_name, prod_price

FROM Products

WHERE vend_id = 'DLL01' OR vend_id ='BRS01'

AND prod_price >= 10;

输出:

可看到有4行价格小于10美元。这是因为执行上述WHERE子句时,先执行AND,后执行OR,这样只要vend_id满足为DLL01,不管vend_id是否为BRS01AND prod_price是否为10

应该使用圆括号进行分组,正确输入:

SELECT prod_name, prod_price

FROM Products

WHERE (vend_id = 'DLL01' OR vend_id ='BRS01')

AND prod_price >= 10;

输出:

圆括号具有比ANDOR操作符更高的求值顺序,所以DBMS首先过滤括号中的OR条件。这样SQL筛选出价格为由DLL01BRS01制造且10美元及以上的所有产品。

2.IN操作符

用来指定条件范围,范围中每个条件均可匹配。IN取一组由逗号分隔、括在圆括号中的合法值。

输入:

SELECT prod_name, prod_price

FROM Products

WHERE vend_id IN ('DLL01','BRS01')

ORDER BY prod_name;

输出:

在此SQL语句中,IN操作符完成了与OR相同的功能,即输入:

SELECT prod_name, prod_price

FROM Products

WHERE vend_id = 'DLL01' or vend_id = 'BRS01'

ORDER BY prod_name;

同样输出:

IN操作符的优点:

1)在有很多合法选项时,IN操作符的语法更清楚,更直观。

2)在与其他ANDOR操作符组合使用IN时,求值顺序更容易管理。

3)IN操作符一般比一组OR操作符执行得更快。

4)IN的最大优点是可以包含其他SELECT语句,能更动态地建立WHERE子句。

3.NOT操作符

有且只有一个功能:否定其后所跟的任何条件。

输入:

SELECT prod_name

FROM Products

WHERE NOT vend_id = 'DLL01'

ORDER BY prod_name;

输出:

DBMS匹配非DLL01之外的所有东西。

也可以使用<>操作符来完成,输入:

SELECT prod_name

FROM Products

WHERE vend_id <> 'DLL01'

ORDER BY prod_name;

输出:

在更复杂的子句中,与IN操作符联合使用时,NOT可以非常简单地找出与条件列表不匹配的行。

原文地址:https://www.cnblogs.com/Sumomo0516/p/6131517.html