过滤数据
数据库表一般包含大量的数据,只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件
eg : select name from student where name="zhangsan";
注意:SQL过滤与应用过滤
数据也可以在应用层过滤。为此目的,SQL的 SELECT 语句为客户机应用检索出超过实际所需的数据,然后客户机代码对返回数据进行循环,以提取出需要的行。通常,这种实现并不令人满意。因此,对数据库进行了优化,以便快速有效地对数据进行过滤。让客户机应用(或开发语言)处理数据库的工作将会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,如果在客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络带宽的浪费。
注意: WHERE 子句的位置
在同时使用 ORDER BY 和 WHERE 子句时,where在前,orderby 在后,应该先条件在排序
mysql支持的条件操作符
操 作 符 说 明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间
注意:MySQL在执行匹配时默认不区分大小写(所以name,和NAME做条件匹配出的是同一条记录)
*****特别记忆:and 和多个or 连接做条件,and 和 or 是并列的,要什么逻辑就把一组括起来
eg:select * from student where name='张三' and price=21 or price=22,or price=23;(张三,21//22//23)
eg:select * from student where name='张三' and (price=21 or price=22,or price=23);(张三和21//张三和22//张三和23)
注意: NULL 无值(no value),它与字段包含 0 、空字符串或仅仅包含
空格不同;在创建表时,表设计人员可以指定其中的列是否可以为空。在
一个列可以为空时,称其为包含空值 NULL
空值检查:
eg: select * from student where price is null;
这条语句返回没有价格(空 price字段,不是价格为0)的所有产品
操作符in 跟多个or 的效果相同
eg:select * from student where price in(21,22,23);
select * from student where price =21 or price =22 or price =23);
NOT操作符 : WHERE 子句中用来否定其后跟条件的关键字
通配符
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符
%任意字符任意次;_只匹配单个字符
like 模糊查询,一般跟通配符配合使用
eg: like 'jet%'
like '%jet%'
like 'a%jet%e'
*********like 'jet' 也对,但不返回任何行值,跟通配符使用才返回值*********
正则表达式
随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性也有必要增加。
这也就是正则表达式变得有用的地方。正则表达式是用来匹配文本的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以使用一个正则表达式。如果你想在一个文本块中找到所有重复的单词,可以使用一个正则表达式。如果你想替换一个页面中的所有URL为这些URL的实际HTML链接,也可以使用一个正则表达式(对于最后这个例子,或者是两个正则表达式)。
所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表
达式,MySQL用 WHERE 子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤 SELECT 检索出的数据。