本章讲授如何组合WHERE子句以创建功能更强的更高级的搜索条件。 咱们还将学习如何使用NOT和IN操做符。学习
上一章介绍的WHERE子句在过滤数据时使用的都是单一条件过滤。事实上为了数据的准确性咱们还可使用多个条件进行过滤,可使用AND子句或者OR子句的方式来完成。ui
📖 操做符(operator)spa
用来联结或改变WHERE子句中的子句的关键字。也称为逻辑运算符。3d
下面的这个例子是使用AND操做符来给WHERE子句附加条件。code
输入 :blog
SELECT uid, week, minute FROM products WHERE week = 1 AND minute = 22
输出: 产品
分析:此SQL语句检索week为1而且minute为22数据。搜索
📖 AND 用在WHERE子句中的关键字,用来指示检索知足全部给定的条件的行。语法
上述例子中使用了只包含一个关键字AND的语句,把两个过滤条件组合在一块儿。==还能够添加多个过滤条件,每添加一条就要使用一个AND.==方法
OR操做符和AND操做符不一样,他指示MSQL检索匹配任一条件的行。 输入:
SELECT uid, week, minute FROM products WHERE week = 1 OR minute = 22
分析:检索week为1或者minute为22的数据。知足一个条件便可。
SQL在处理OR操做前优先处理AND操做符。 解决方法就是使用()
输入:
SELECR prod_name,pro_price FROM producets WHERE wend_id = 1002 OR vand_id = 1003 AND prod_price >= 10;
改为:
SELECR prod_name,pro_price FROM producets WHERE (wend_id = 1002 OR vand_id = 1003) AND prod_price >= 10;
分析:
这条SELECT 语句 与前条的惟一差异是,这条语句中,前两个条件用圆括号括起来。由于圆括号具备较AND或OR操做符高的计算次序,DBMS首先过滤圆括号内的OR条件。
任什么时候候使用具备AND和OR操做符的WHERE语句,都应该使用过圆括号明确的分组操做操做符。不要过度依赖默认计算次序,即便它确实是你想要的东西也是如此
IN操做符用来指定条件范围,范围中的每一个条件均可以进行匹配。IN取合法值的由逗号分隔的清单,所有在圆括号中。
输入:
SELECT prod_name , prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name
输出:
分析:
此SELECT语句检索供应商1002和1003制造的全部产品。IN操做符后跟又逗号分隔的合法值清单,整个清单必须扩在圆括号内。
⭐️ IN操做符和OR功能相同,但IN操做符比OR操做符执行更快
OR写法:
SELECT prod_name , prod_price FROM products WHERE vend_id = 1002 OR vend_id =1003 ORDER BY prod_name
在使用长的合法选项清单的时,IN操做符的语法更清楚且更直观。
在使用 IN时,计算的次序更容易管理(由于使用的操做符更少)。
IN 操做符通常比OR操做符清单执行更快。
IN 的最大的优势是能够包含其余SEKECT语句,使的可以更动态的创建 WHERE 语句。
NOT操做符有且只有一个功能,那就是否认它以后所跟的任何条件。
📖 NOT WHERE子句中用来否认后跟条件的关键字。
使用:
列出除1002和1003以外的全部供应商制造的产品。
输入:
SELECT prod_name , prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
分析: 这里的NOT 否认跟在它以后的条件,所以,MySQL不是匹配1002和1003 的vendi_id,而是匹配 1002和1003 以外供应商的vend_id.
✏️ MySQL 中的NOT
MySQL支持使用 NOT 对 IN 、 BETWEEN 和 EXISTS 子句取反,这与多数其余DBMS容许使用NOT对各类条件取反有很大的差异。
本章讲授如何用AND和OR操做符组合成WHERE子句,并且还讲授了如 何明确地管理计算的次序,如何使用IN和NOT操做符。