MySQL WHERE数据过滤(二)

来源:互联网 发布:笔顺软件下载 编辑:程序博客网 时间:2024/06/09 23:13

说明:本文所使用的数据库样例表创建脚本下载地址: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);
原创粉丝点击