一、 数据过滤
如何组合WHERE子句以建立功能更强的更高级的搜索条件和如何使用NOT和IN操作符
1.1 组合WHERE子句
MySQL允许给出多个WHERE子句,以AND子句的方式或OR子句的方式使用
1.1.1 AND操作符
通过不止一个列进行过滤
mysql> SELECT prod_id, prod_price, prod_name
-> FROM products
-> WHERE vend_id = 1003 AND prod_price <= 10;
1.1.2 OR操作符
匹配任一条件的行
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id = 1002 OR vend_id = 1003;
1.1.3 计算次序
WHERE可含任意数目的AND和OR操作符
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;
分析
返回的行中有两行价格小于10美元,返回的行未按预期的进行过滤。SQL理解为由供应商1003制造的任何价格为10美金及以上的产品,或者由供应商1002制造的任何产品。
AND在计算次序中优先级更高,操作符被错误地组合
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
1.2 IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id IN (1002,1003)
-> ORDER BY prod_name;
IN操作符完成与OR相同的功能
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id = 1002 OR vend_id = 1003
-> ORDER BY prod_name;
1.3 NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,否定它之后的任何条件
mysql> SELECT prod_name, prod_price
-> FROM products
-> WHERE vend_id NOT IN (1002,1003)
-> ORDER BY prod_name;