第六章 过滤数据
1.使用 where语句
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出
select 列名 from 表名
where 查询条件;
SQL过滤与应用过滤 数据也可以在应用层过滤。为此目的,SQL的SELECT语句为客户机应用检索出超过实际所需的数据,然后客户机代码对返回数据进行循环,以提取出需要的行。通常,这种实现并不令人满意。因此,对数据库进行了优化,以便快速有效地对数据进行过滤。让客户机应用(或开发语言)处理数据库的工作将会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,如果在客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络带宽的浪费。
WHERE子句的位置 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误
2.where子句操作符
2.1 检查单个值
select 列名1,列名2 from 表名
where 列名1满足的查询条件;
MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
2.2 不匹配检查
select 列名1,列名2 from 表名
where 列名1不满足的查询条件;
何时使用引号 引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。
2.3 范围值查询
select 列名1,列名2 from 表名
where 列名1 between min and max;
***使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。***这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
2.4空值查询
查询列名1是NULL的数据
select 列名1,列名2 from 表名
where 列名1 is NULL;
NULL与不匹配 在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行
第七章 数据过滤
1. 组合where子句
操作符(operator) 用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logical operator)。
1.1 and 操作符
AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
select 列名1,列名2 from 表名
where 查询条件1 and 查询条件2;
1.2 or操作符
OR WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。
select 列名1,列名2 from 表名
where 查询条件1 or 查询条件2;
1.3 计算次序
select 列名1,列名2 from 表名
where 查询条件1 or 查询条件2 and 查询条件3;
select 列名1,列名2 from 表名
where (查询条件1 or 查询条件2) and 查询条件3;
上述两个SQL语句的查询次序是不同的
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
在WHERE子句中使用圆括号 任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。
2. in操作符
IN WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。
select 列名1,列名2 from 表名
where 列名1 in (min,max);
为什么要使用IN操作符?
❑ 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
❑ 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
❑ IN操作符一般比OR操作符清单执行更快。
❑ IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。第14章将对此进行详细介绍。
3. not操作符
NOT WHERE子句中用来否定后跟条件的关键字。
select 列名1,列名2 from 表名
where 列名1 not in (min,max);
MySQL中的NOT MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。