_4_ SQL 过滤数据(WHERE)
2018-06-26 本文已影响11人
changsanjiang
本文demo
https://gitee.com/changsanjiang/SQLDemo/tree/master
使用WHERE子句(操作符 =
)
表中一般包含大量的数据, 我们通常只检索所需的数据. 因此需要指定搜索条件(search criteria), 搜索条件也称为过滤条件(filter condition).
在SELECT语句中, 数据根据WHERE子句中指定的搜索条件进行过滤. WHERE子句在表名(FROM 子句)之后给出. 如下:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
分析:
这条语句从 products 表中检索两个列, 只返回prod_price值为3.49的行.
输出:
image.png这个示例使用了简单的相等检验: 即检查这一列的值是否为指定值(prod_price = 3.49), 据此过滤数据. 不过, SQL不止能测试等于, 还能做更多的事情.
**提示**
数据虽然也可以在应用层进行过滤.
但为此, SQL的SELECT语句将为客户端应用检索出超过实际所需的数据, 客户端据此数据进行循环过滤, 提取所需行.
通常, 这种做法及其不妥.
优化数据库后可以更快速有效地对数据进行过滤. 而让客户端应用处理数据库的工作将会极大地影响应用的性能.
并且使所创建的应用完全不具备可伸缩性.
此外, 如果在客户端过滤数据, 服务器不得不通过网络发送多余数据, 这将导致网络带宽的浪费.
WHERE子句操作符
下表列出了所有条件操作符.
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
!< | 不小于(相当于>=) |
!> | 不大于(相当于<=) |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为NULL的值 |
**注意: 操作符兼容**
上表中列出的某些操作符是冗余的. 例如`<>`和`!=`都表示为不等于.
并非所有DBMS都支持这些操作符. 请参阅相应的DBMS文档, 确定支持哪些操作.
操作符 <
和 <=
我们再来举两个简单操作的例子. 如下, 列出所有价格小于5美元的产品.
SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 5;
输出:
image.png如下, 列出 <= 10美元的产品
SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;
输出:
image.png范围值检查(操作符BETWEEN
)
BETWEEN操作符用来检查某个范围的值. 它需要两个值, 即范围的开始与结束. 其语法与其他WHERE子句的操作符稍有不同.
如下, 检索3.49美元和5美元之间的产品.
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 3.49 AND 5;
输出:
image.png分析:
在使用BETWEEN时, 必须指定两个值. 同时必须用AND关键字分隔. BETWEEN匹配的值包括指定的开始值和结束值.
空值检查( NULL )
在一个列不包含值时, 称其包含空值NULL
. 它与字段包含0或空字符串或仅仅包含空格不同.
确定是否为NULL, 不能简单的检查是否等于NULL(prod_name = NULL
❌), 正确的操作是使用 IS NULL
子句. 其语法如下:
SELECT *
FROM Products
WHERE prod_desc IS NULL;
输出:
image.png另外, IS NULL
也可写为ISNULL
. 如下:
SELECT *
FROM Products
WHERE prod_desc ISNULL;