本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件。
使用WHERE子句
数据库表一般包含大量的数据,很少需要检索表中所有行。在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。
SELECT * FROM Product WHERE product_type = '办公用品';
过滤当然也可以查出来表中的所有数据,然后写代码的编写规则对数据进行过滤。
但是这样做会大大的降低应用的性能,并且,如果在客户机上过滤数据,那么服务器不得不通过网络发送多余数据,这还会导致带宽的浪费。
使用顺序
WHERE
子句的位置 在同时使用ORDER BY
和WHERE
子句时,应该让ORDER BY
位于WHERE
之后,否则将会产生错误。
WHERE子句操作符
检查单个值
SELECT * FROM users WHERE name='Vth';
注意,MySQL默认是不区分大小写的。
不匹配检查
SELECT * FROM users WHERE name<>'Vth';
这会检索出所有名字不是vth的。
何时使用引号
与字符串比较需要加引号。与数值比较不用加引号。
注意,!=
和<>
是通用的。
范围值检查
SELECT * FROM users WHERE name BETWEEN 'vth' AND 'vthza';
这会把vth到vthza之间的都列出来。
在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND
关键字分隔。BETWEEN
匹配范围中所有的值,包括指定的开始值和结束值。
空值检查
在一个列不包含值时,称其为包含空值NULL。
NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
NULL是啥都没有,是虚无。 空格是有东西,只是看不出来。
SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL
子句。
SELECT * FROM Product WHERE purchase_price IS NULL;
那不匹配NULL怎么办?
SELECT * FROM Product WHERE purchase_price IS NOT NULL;
注意,NULL即不是匹配条件,也不是不匹配条件。
举个栗子:下面是表数据
我们按照purchase_price = 790 和 不等于790进行过滤,都未出现NULL。
所以我们可以推断出,NULL即不是匹配条件,也不是不匹配条件。