数据库表中一般包含大量数据,而我们一般需要的是表数据的子集,所以只要指定好搜索条件,就可以检索到我们想要的数据

本节对应的是《Mysql必知必会》六、七章

过滤数据

通过WHERE子句指定搜索条件

使用WHERE子句

WHERE子句在FROM子句后面,ORDER BY子句在WHERE子句后面,因为先选出数据再排序

#查询价格为2.50的商品的名字
select prod_name,prod_price from products where prod_price = 2.50;

mysql 过滤html标签 mysql数据过滤_mysql 过滤html标签

这个是简单的判断数值相等

WHERE子句操作符

操 作 符

说    明

=

等于

<>

不等于

!=  

不等于

<

小于

<=  

小于等于

>

大于

>=  

大于等于

BETWEEN

在指定的两个值

检查单个值

#查询商品名称为fuses的商品和价格
select prod_name,prod_price from products where prod_name = 'fuses';

mysql 过滤html标签 mysql数据过滤_数据_02

需要注意的是商品名是大写的Fuses,也就是说Mysql默认不区分大小写,另外字符串需要用单引号

#查询价格小于等于10的所有商品
select prod_name,prod_price from products where prod_price <= 10;

mysql 过滤html标签 mysql数据过滤_数据_03

不匹配检查

#不是由供应商1003制造的产品
select vend_id,prod_name from products where vend_id != 1003;

mysql 过滤html标签 mysql数据过滤_mysql 过滤html标签_04

其中  != 可以换成 <>

范围值检查

利用BETWEEN操作符检查某个范围的值

#查询价格为5-10的商品
select prod_name,prod_price from products where prod_price between 5 and 10;

mysql 过滤html标签 mysql数据过滤_搜索_05

需要注意的是between是闭区间,包括范围边界值5和10

#between用于字符
select prod_name,prod_price from products where prod_name between 'a' and 'z';

mysql 过滤html标签 mysql数据过滤_搜索_06

空值检查

如果一个列的值不存在,则称为空值NULL,需要注意的是空格和0是有值的,空值就是啥都没有

#查询顾客邮箱为空的顾客信息
select cust_id,cust_name from customers where cust_email is null;

mysql 过滤html标签 mysql数据过滤_数据_07

数据过滤

上一部分主要是讲单一条件下对数据进行过滤,这一部分是通过组合WHERE子句来实现更高级的搜索条件

组合WHERE子句

操作符(operator) 用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator),以AND子句的方式或OR子句的方式使用。

AND操作符,就是逻辑与

#查询由供应商1003制造且价格小于等于10的产品信息
select prod_id,prod_name,prod_price from products where vend_id=1003 and prod_price <= 10;

mysql 过滤html标签 mysql数据过滤_数据_08

如果有更多的条件,每两个条件之间一个AND

OR操作符,就是逻辑或

#查询供应商1002和1003制造的商品信息
select prod_name,prod_price from products where vend_id = 1002 or vend_id = 1003;

mysql 过滤html标签 mysql数据过滤_mysql 过滤html标签_09

计算次序

AND与OR操作符可以组合进行复杂的过滤,但是如果一起用的时候会有一个优先级的问题,AND优先级高于OR

#查询供应商1002和1003生产的产品价格大于等于10的产品信息
select prod_name,prod_price from products where vend_id=1002 or vend_id=1003 and prod_price >= 10;

mysql 过滤html标签 mysql数据过滤_操作符_10

从结果可以看出,有两个商品价格低于10,原因就是AND优先级高于OR,所以为了避免错误多个条件一定要用括号

select prod_name,prod_price from products where (vend_id=1002 or vend_id=1003 ) and prod_price >= 10;

mysql 过滤html标签 mysql数据过滤_数据_11

IN操作符

IN操作符用来指定条件范围,范围中的每个条件都会进行匹配

#查询供应商1002和1003制造的产品信息
select prod_name,prod_price from products where vend_id in (1002,1003) order by prod_name;

mysql 过滤html标签 mysql数据过滤_搜索_12

上述语句与下面语句等价的

select prod_name,prod_price from products where vend_id=1002 or vend_id=1003 order by prod_name;

IN操作符主要有自己的优点

在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。

在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。

IN操作符一般比OR操作符清单执行更快。

IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

NOT操作符

NOT操作符是否定后面的所有条件

#查询除1002和1003供应商之外其他供应商制造的产品信息
select vend_id,prod_name,prod_price from products where vend_id not in (1002,1003);

mysql 过滤html标签 mysql数据过滤_mysql 过滤html标签_13

NOT在后面复杂的SQL语句中很有用

下一节将会讲解匹配搜索