说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts
我的上一篇博客都是使用WHERE子句单一条件下的数据过滤,本文将讲述更高级的搜索条件。
一、组合WHERE子句
为了更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式组合:以AND子句的方式或OR子句的方式使用。
1.AND操作符
为了不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。下面给出示例:
mysql> SELECT prod_id, prod_price, prod_name
-> FROM products
-> WHERE vend_id=1003 AND prod_price<=10;
运行结果:
2.OR操作符
OR操作符和AND操作符不同,它只是MySQL检索匹配任何一条件的行,请看下面示例:
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id=1002 OR vend_id=1003;
运行结果:
注意:在AND和OR一起组合使用时要注意计算次序的问题,由于AND的优先级高,所以先会考虑AND操作符,然后再考虑OR操作符,请看下面示例:
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10;
运行结果:
如果上述指令是想得到vend_id为1002或者1003,且价格大于等于10美元的所有产品。那么根据运行结果显然不对,因为先考虑AND运算符,再考虑OR运算符,故计算次序不是按照指令书写次序的。可以用括号来修改优先级,下面为修改过的指令:
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE (vend_id=1002 OR vend_id=1003) AND prod_price>=10;
运行结果:
通过用括号修改优先级变得到了正确的结果。
二、IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。其语法如下:
WHERE 列名 IN (条件1, 条件2, ..., 条件n);
举例说明:
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id IN (1002, 1003)
-> ORDER BY prod_name;
运行结果:
三、NOT操作符
WHERE子句中NOT操作符有且仅有一个功能,那就是否定它之后所跟的任何条件。举例说明:
mysql> SELECT vend_id, prod_name, prod_price
-> FROM products
-> WHERE NOT (vend_id=1002 OR vend_id=1003);
运行结果:
上述指令列出除了vend_id为1002和1003之外的所有产品。下面指令可以实现相同的功能:
mysql> SELECT vend_id, prod_name, prod_price
-> FROM products
-> WHERE vend_id NOT IN(1002, 1003);