SQL必知必会 笔记 第五章 高级过滤数据

来源:互联网 发布:淘宝九块九包邮在哪 编辑:程序博客网 时间:2024/05/18 01:29

5.1组合WHERE子句

操作符(operator)用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符。

5.1.1 AND操作符

为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。

SELECT prod_id,prod_price,prod_nameFROM ProductsWHERE vend_id = 'DLL01' AND prod_price <= 4;

AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。

5.1.2OR操作符

OR操作符与AND操作符不同,他指示数据库管理系统软件检测匹配任一条件的行。事实上,许多DBMS在OR WHERE子句的第一个条件满足的情况下,不再计算第二个条件。

SELECT prod_name,prod_priceFROM ProductsWHERE vend_id = 'DLL01' OR vend_id = 'BRS01';WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。

5.1.3计算次序

WHERE可包含任意数目的AND和OR操作符。

SELECT prod_name,prod_priceFROM ProductsWHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >=10;

不会按预期进行过滤。原因在于计算的次序。SQL在处理OR操作符前,优先处理AND操作符。SQL看到语句时,他理解为有供应商BRS01制造的任何价格为10美元以上的产品,或者由供应商DLL01制造的任何产品,而不管其价格如何。

SELECT prod_name,prod_priceFROM ProductsWHERE (vend_id = 'DLL01' OR vend_id = 'BRS01' )AND prod_price >=10;

使用圆括号将前两个条件括起来。
在WHERE子句中使用圆括号:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序。

5.2IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全部括在圆括号中。

SELECT prod_name,prod_priceFROM ProductsWHERE vend_id IN('DLL01','BRS01')ORDER BY prod_name;

等价于WHERE vend_id =’DLL01’ OR vend_id = ‘BRS01’
使用IN操作符的优点:
1.在长时间的合法选项清单时,IN操作符的语法更清楚且更直观。
2.在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
3.IN操作符一般比OR操作符清单执行更快。
4.IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

5.3NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。因为NOT从不自己使用,它的语法与其他操作符有所不同。NOT可以用在要过滤的列前,而不仅是在其后。
NOT WHERE子句中用来否定后跟条件的关键字。

SELECT prod_nameFROM ProductsWHERE NOT vend_id = 'DLL01'ORDER BY prod_name;

NOT否定跟在它之后的条件。
等价于:

SELECT prod_nameFROM ProductsWHERE  vend_id <> 'DLL01'ORDER BY prod_name;

在使用简单的WHERE子句时,使用NOT没有什么优势。但是在更复杂的子句中,NOT是非常有用的。
MySQL中的NOT:MySQL不支持这里描述的NOT的格式。在MySQL中,NOT只用来否定EXISTS(NOT EXISTS)

0 0
原创粉丝点击