处理大量数据过滤,或是需要从海量数据中寻找我们需要的数据时,where子句的过滤是必不可少的,以下是基础常用的操作符。
首先需要知道sql中是允许多个where子句的,也就是where后可以接上很多的操作语句,通常会使用and或是or来连接多条子句。
1.and与or使用
And:并列关系,同时生效的条件。
Or:符合任一子句的条件即可。
同时使用时需要注意:and优先级要高于or。
例如语句1:从员工表中查询地区在上海或是北京,职位M1的员工姓名。
select name from empl where area='上海' or area='北京' and rank='M1'
此时语句释义为:查询地区为北京且职级为M1的员工,或地区为上海的员工姓名。显而易见,这不是我们需要的结果。
要达到语句1的结果应该这样写:select name from empl where (area='上海' or area='北京' ) and rank='M1'
使用圆括号把or两个两条括起来,这样就会先处理括号里的语句,再执行and语句。优先级是这样:圆括号>and>or。
2.in与not
in:指定条件范围,符合范围内的数据。
语法:in ('条件1','条件2','条件3')
not:总是与其他操作符搭配使用的,作用是否定其后所跟的任何条件。
例如:not in ('条件1','条件2','条件3')
与运算符 != 或是 <> 表达的意思相同,不同的是,not in只需要一条操作语句即可,运算符则需要多个and语句来阐明多个条件。
3.like操作符(通配符%,下划线_,方括号[[])
like操作符,也就是常说的模糊查询了,使用like操作符与通配符搭配使用,查询含有某字符的数据。
语句1:select name from empl where name like '张%'
语意:查询所有name中以张起头的员工信息。%匹配多个字符。
语句2:select name from empl where name like '%张%'
语意:查询所有name中含有张字的员工信息。
语句3:select name from empl where name like '张_'
语意:查询所有name中姓名为两个字且以张字开头的员工信息。_匹配单个字符。
语句4:select name from empl where name like '[张杨]%'
语意:查询所有name中以张或是杨字起头的员工信息。
语句5:select name from empl where name like '[^张杨]%'
语意:查询所有name中不是张或杨字起头的员工信息。^脱字号,用来否定此条件。
使用总结:
方括号匹配字符集的形式,目前接触到的数据库只有sql server支持集合,其他如mysql,oracle,db2等都不支持。
%可以匹配0字符,但不能匹配空格,不会匹配null值。需要注意有些dbms中的数据存储形式,会有使用空格补充字符长度的情况,一般会在末尾再加一个%用来排除有空格存在的情况,或是先用函数处理空格等。
_匹配单个字符,也可以与%连接使用。全看具体的查询要求。
在实际使用中应该减少通配符的使用,因为这个会增加搜索的消耗,增加查询的时间,在其他的操作符能替代的情况下,尽量减少使用通配符。不可避免的时候,注意选择正确的通配符,以及它的位置,确保查询出来的是符合要求的数据。