MySQL必知必会 —— 过滤数据

第六章 过滤数据

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 查询条件2and 查询条件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对各种条件取反有很大的差别。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章