[TOC]
第六章 过滤数据
6.1 使用 where 子句
只检索所需数据需要指定搜索条件(过滤条件)。
在SEELECT语句中,根据WHERE子句指定的搜索条件进行过滤,where子句在表名(FROM子句)之后给出
SELECT prod_name,prod_price FROM `products` WHERE prod_price = 36.0;
这里采用相等测试:检查一个列是否具有指定的值,据此进行过滤。但是SQL允许做的事情不仅仅是相等测试。
注意: 在实际开发中,应尽量避免在客户机依靠代码对返回的数据进行循环提取所需数据。如果在客户机过滤数据,则不仅会影响应用性能,而且这样的应用不具有伸缩性。另外,通过网络发送的多余数据将导致带宽的浪费。
在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于WHERE之后,否则会发生报错
6.2 WHERE 子句操作符
下表列出所有条件操作符
6.2.1 检查单个值 (=,<,<=)
=
SELECT prod_name,prod_price FROM `products` WHERE prod_price = 36.0;
这里测试相等的例子,会返回prod_price为36.0的记录。MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
<
SELECT prod_name,prod_price FROM `products` WHERE prod_price < 36.0;
<=
SELECT prod_name,prod_price FROM `products` WHERE prod_price <= 36.0;
6.2.2 不匹配检查(!=)
SELECT prod_name,prod_price,prod_area FROM `products` WHERE prod_area != 'uk';
检索产地不是UK的记录
何时使用引号:
如果仔细观察上述WHERE子句中使用的条件,会看到有的值括在单引号内(如前面使用的'fuses'),而有的值未括起来。
单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。
用来与数值列进行比较的值不用引号。
6.2.3 范围值检查(between min and max)
SELECT prod_name,prod_price FROM `products` WHERE prod_price BETWEEN 10 AND 100;
在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用
AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
6.2.4 空值检查(is null)
NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。
SELECT语句有一个特殊的WHERE子句,IS NULL子句可用来检查具有NULL值的列。
SELECT prod_name,prod_price FROM `products` WHERE prod_price IS NULL;
此处products表中没有null故无返回数据