本章讲述如何使用SELECT语句的WHERE子句指定搜索条件
使用WHERE子句
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件
SELECT prod_name, prod_price
FROM products
WHERE prod_price = 2.50;
SQL过滤与应用过滤
数据也可以在应用层过滤,为此目的,SQL的SELECT语句为客户机应用检索出超过实际所需的数据,然后客户机代码对返回数据进行循环,以提取出需要的行
通常这种实现并不令人满意。因此,对数据库进行了优化,以便快速有效地对数据进行过滤。让客户机应用(或开发语言)处理数据库的工作将会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,如果在客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络带宽的浪费。
WHERE子句操作符
MySQL在执行匹配时默认不区分大小写,也会匹配出Fuses
SELECT prod_name, prod_price
FROM products
WHERE prod_name = 'fuses';
SELECT prod_name, prod_price
FROM products
WHERE prod_price < 10;
SELECT prod_name, prod_price
FROM products
WHERE prod_price <= 10;
SELECT vend_id, prod_name
FROM products
WHERE vend_is <> 10;
SELECT vend_id, prod_name
FROM products
WHERE vend_id != 1003;
SELECT prod_name, prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
BETWEEN a AND b,包括指定的开始值和结束值。
SELECT prod_name
FROM products
WHERE prod_name IS NULL;
NULL与不匹配
在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们
因此,在过滤数据时,一定要验证返回数据中确定给出了被过滤具有NULL的行。