MySQL WHERE数据过滤(二)

说明:本文所使用的数据库样例表创建脚本下载地址: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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值