数据过滤-WHERE组合子句

本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。 我们还将学习如何使用NOT和IN操作符。

1.组合WHERE子句

上一章介绍的WHERE子句在过滤数据时使用的都是单一条件过滤。事实上为了数据的准确性我们还可以使用多个条件进行过滤,可以使用AND子句或者OR子句的方式来完成。

📖 操作符(operator)

用来联结或改变WHERE子句中的子句的关键字。也称为逻辑运算符。

1.1 AND操作符

下面的这个例子是使用AND操作符来给WHERE子句附加条件。

输入 :

SELECT  uid, week, minute 
FROM    products
WHERE  week = 1  AND  minute = 22

输出:

mysql where字段is not null不生效 mysql where or_MySQL

分析:此SQL语句检索week为1并且minute为22数据。

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

上述例子中使用了只包含一个关键字AND的语句,把两个过滤条件组合在一起。还可以添加多个过滤条件,每添加一条就要使用一个AND.

1.2 OR操作符

OR操作符和AND操作符不同,他指示MSQL检索匹配任一条件的行。
输入:

SELECT  uid, week, minute 
FROM    products
WHERE  week = 1  OR  minute = 22

分析:检索week为1或者minute为22的数据。满足一个条件即可。

1.3 计算次序

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条件。

在WHERE子句中使用圆括号

任何时候使用具有AND和OR操作符的WHERE语句,都应该使用过圆括号明确的分组操作操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此

1.4 IN操作符

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

输入:

SELECT prod_name , prod_price
 FROM products
 WHERE vend_id IN (1002,1003)
 ORDER BY prod_name

输出:

mysql where字段is not null不生效 mysql where or_MySQL_02

分析:

此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操作符优点:
  1. 在使用长的合法选项清单的时,IN操作符的语法更清楚且更直观。
  2. 在使用 IN时,计算的次序更容易管理(因为使用的操作符更少)。
  3. IN 操作符一般比OR操作符清单执行更快。
  4. IN 的最大的优点是可以包含其他SEKECT语句,使的能够更动态的建立 WHERE 语句。

1.5 NOT操作符

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操作符。