SQL WHERE高级数据过滤

1.讲解WHERE子句建立功能更强、更高级的搜索条件,将学习NOT和IN操作符
上面我们将WHERE子句在过滤数据时使用的都是单元的条件,为了更强的过滤控制,SQL允许给出多个WHERE子句,这些自己有两种使用方式,即AND子句或OR子句使用方式.

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

2.AND操作符
用来检索满足条件的行
要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件,下面代码给出一个列子:
SQL语句检索有产品名字和折扣价格满足条件的输出.
在这里插入图片描述
3.OR操作符
用来表示检索匹配任一给定的条件的行.
OR操作符与AND操作符正好相反,它指示DBMS检索匹配任何一条件的行,事实上,许多DBMS在OR WHERE子句的第一个条件得到满足的情况下,就不在计算第二个条件了(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来).

OR操作符告诉DBMS匹配任意条件而不是同时匹配两个条件,如果这里使用的是AND操作符,则没有数据返回(因为会创建没有匹配行的WHERE子句).
在这里插入图片描述

4.求值顺序
WHERE子句可以包含任意数目的AND和OR操作符,允许两者结合以进行复杂、高级过滤.
我们可以看到有问题,显然行没有按预期的进行过滤,为什么?原因在于求值的顺序,SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符,当SQL看到WHERE子句时,10252价格为30以上,以及10248的所有产品ID,而不管其价格如何,换句话说,由于AND在求值过程中优先级更高,操作符被错误地组合了.
在这里插入图片描述
我们采用圆括号对操作符进行明确分组,看下面SELECT语句及输出:因为AND具有比OR操作符更高的求值顺序,所以DBMS首先过滤括号内的OR条件,这时,SQL语句变成了选择由价格在30以上的所以ID.
在这里插入图片描述

在WHERE子句使用圆括号
任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作,不要过分依赖默认求值顺序,即使它确实如你希望的那样.使用圆括号没有坏处,它能消除歧义.

5.IN操作符
WHERE子句中用来指定要匹配的清单关键字,功能与OR相当.
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取一组都会分隔、括在圆括号的合法值.下面介绍这个操作符.
此SELECT语句检索查出产品OrderID,IN操作符后跟由逗号分隔的合法值,这些值必须在括号中.

在这里插入图片描述
为什么使用IN操作符呢,其优点为:
在有很多合法选项时,IN操作符的语法更清楚,更直观.
在与其他AND和OR操作符组合使用IN时,求值顺序更易管理.
IN操作符一般比一组OR操作符执行得更快
IN的最大优点是可以包含其他SELECT语句,能更动态地建立WHERE子句.

6.NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件,因为NOT从不单独使用(它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同,NOT关键字可以用在要过滤的数据.

NOT
WHER子句中用来否定其后的关键字
列出了产品为Chai之外的所有产品.
在这里插入图片描述
这里的NOT否定跟在其后的条件,因此,DBMS不是匹配ProductName=‘Chai’,而是匹配Chai之外的所有东西.

也可以使用<>操作符来完成.
在这里插入图片描述
为什么使用NOT?这里简单WHERE子句,使用NOT确实没有什么优势,在更复杂句子中,NOT是非常有用的,例如,在联合IN操作符联合使用时,NOT可以非常简单地找出与条件列表不匹配的行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章