mysql必知必会--过 滤 数 据

使用 WHERE 子句

数据库表通常包含大量的数据,不多须要检索表中全部行。一般只
会根据特定操做或报告的须要提取表数据的子集。只检索所需数据须要
指定搜索条件(search criteria),搜索条件也称为过滤条件(filter
condition)。
在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。
WHERE 子句在表名( FROM 子句)以后给出,

这条语句从 products 表中检索两个列,但不返回全部行,只返
回 prod_price 值为 2.50 的行数据库

这个例子采用了简单的相等测试:它检查一个列是否具备指定的值,
据此进行过滤。可是SQL容许作的事情不只仅是相等测试服务器

SQL过滤与应用过滤 数据也能够在应用层过滤。为此目
的,SQL的 SELECT 语句为客户机应用检索出超过实际所需的
数据,而后客户机代码对返回数据进行循环,以提取出须要
的行。网络

一般,这种实现并不使人满意。所以,对数据库进行了优化,
以便快速有效地对数据进行过滤。让客户机应用(或开发语言)
处理数据库的工做将会极大地影响应用的性能,而且使所建立
的应用彻底不具有可伸缩性。此外,若是在客户机上过滤数据,
服务器不得不经过网络发送多余的数据,这将致使网络带宽的
浪费。性能

WHERE 子句的位置 在同时使用 ORDER BY 和 WHERE 子句时,应
该让 ORDER BY 位于 WHERE 以后,不然将会产生错误测试

WHERE 子句操做符

咱们在关于相等的测试时看到了第一个 WHERE 子句,它肯定一个列是
否包含特定的值。MySQL支持表6-1列出的全部条件操做符
优化

不匹配检查

如下例子列出不是由供应商 1003 制造的全部产品

什么时候使用引号单引号用来限定字符串。若是将值与串类型的
列进行比较,则须要限定引号。用来与数值列进行比较的值不
用引号。设计

下面是相同的例子,其中使用 != 而不是 <> 操做符:
3d

范围值检查

为了检查某个范围的值,可以使用 BETWEEN 操做符。其语法与其余 WHERE
子句的操做符稍有不一样,由于它须要两个值,即范围的开始值和结束值。
例如, BETWEEN 操做符可用来检索价格在5美圆和10美圆之间或日期在指
定的开始日期和结束日期之间的全部产品blog

下面的例子说明如何使用 BETWEEN 操做符,它检索价格在5美圆和10
美圆之间的全部产品
开发

从这个例子中能够看到,在使用 BETWEEN 时,必须指定两个值
——所需范围的低端值和高端值。这两个值必须用 AND 关键字
分隔。 BETWEEN 匹配范围中全部的值,包括指定的开始值和结束值

空值检查

在建立表时,表设计人员能够指定其中的列是否能够不包含值。在
一个列不包含值时,称其为包含空值 NULL

NULL 无值(no value),它与字段包含 0 、空字符串或仅仅包含
空格不一样

SELECT 语句有一个特殊的 WHERE 子句,可用来检查具备 NULL 值的列。
这个 WHERE 子句就是 IS NULL 子句。其语法以下:

这条语句返回没有价格(空 prod_price 字段,不是价格为 0 )的全部
产品,因为表中没有这样的行,因此没有返回数据

NULL 与不匹配 在经过过滤选择出不具备特定值的行时,你
可能但愿返回具备 NULL 值的行。可是,不行。由于未知具备
特殊的含义,数据库不知道它们是否匹配,因此在匹配过滤
或不匹配过滤时不返回它们。
所以,在过滤数据时,必定要验证返回数据中确实给出了被
过滤列具备 NULL 的行。

本章介绍了如何用 SELECT 语句的 WHERE 子句过滤返回的数据。咱们学 习了如何对相等、不相等、大于、小于、值的范围以及 NULL 值等进行测 试。

相关文章
相关标签/搜索