每天一点数据库之-----Day 5 过滤查询
----转载请注明出处:coder-pig
本节引言:
上一节我们学习了基本的数据检索,这节我们来学习高级一点的
过滤查询~
1.单字符过滤:
就是使用"_"这个下划线来替代一个字符,比如,我们想检索出:
door,book,cool,took这类字符串的话,我们可以使用"_oo_"
比如我们使用下述SQL语句:
SELECT * FROM T_Worker WHERE FName LIKE ‘_a_y‘
运行后:
如果你的DBMS支持中文的话
SELECT * FROM T_Worker WHERE FDName LIKE ‘__ 部 ‘
运行后:
2.多字符过滤:
当然有的时候,字符的个数可能是不定的,比如:
①我们查询表中姓名是以字符"J"开头的字符串
这个时候就要用到"%"这个通配符
SQL语句如下:
SELECT * FROM T_Worker WHERE FName LIKE ‘J%‘
运行结果如下:
②当然,你可以同时用多个%,比如我们使用下面的SQL语句:
SELECT * FROM T_Worker WHERE FName LIKE ‘%a%y‘
运行结果如下:
③你也可以搭配着单字符的"_"那个使用
比如:取出表中名字含有‘a‘且是倒数第二个字母的记录:
SELECT * FROM T_Worker WHERE FName LIKE ‘%a_‘
运行结果:
另外,还有一个用法,例子:
不是以J开头的记录:
SELECT * FROM T_Worker WHERE NOT ( FName LIKE ‘J%‘ )
3.空值检测:
有时可能需要我们对表中的空值进行检测,比如检测工人表中工资为空的人员的信息:
如果直接WHERE FSalary = null是不行的,必须得使用"IS NULL"这个关键字
如下面的SQL语句:
SELECT * FROM T_Worker WHERE FSalary IS NULL
运行后:
当然你也可以判断不为空,改成IS
NOT NULL就可以了!
4.反义运算符
就是不等于,不小于,不大于,某些DBMS是可以直接使用"!"符号,又或者
<>表示等于,<=不大于,>=不小于
当然,为了适应不同的数据库,我们可以变通下使用NOT运算符,使用下述SQL来完成:
比如以下这条SQL语句:
SELECT * FROM T_Worker
WHERE NOT( FAge = 22) AND NOT ( FSalary < 3000 )
运行结果:
分析:这个SQL语句很简单,就是筛选年龄不为22,以及工资不小于3000元的员工信息~
5.多个值的筛选
从上面我们知道可以通过运算符OR,NOT,AND来筛选多个值,
假如有多个值,比如我们需要查询表中年龄为:18,20,22,24,26的员工的信息
我们可以写多个OR来完成,但假如,不止五个值呢?10个或者更多,这个时候
不但写起来麻烦,维护起来也难,而且一不小心就可能引起数据错误!对于这种情况
SQL为我们提供了IN语句
上面查询年龄的SQL可以这样写:
SELECT * FROM T_Worker
WHERE FAge IN(18 , 20, 22 ,24 , 26)
运行SQL:
6.范围值的筛选
上面这种情况适合于特定值筛选的部分,假如是一个范围值呢?比如我要筛选
18-25,30-50的员工呢?当然,可以直接用上面的IN关键字,不过写起来有点麻烦
假如我们筛选的是工资呢?有小数,你怎么玩,这个时候就要用到SQL为我们提供的
另一个语句:BETWEEN AND语句了!
上述这个问题的SQL语句如下:
SELECT * FROM T_Worker
WHERE (FAge BETWEEN 18 AND 20)
OR ( FAge BETWEEN 30 AND 50 )
运行SQL:
另外,从查询结果我们也知道了BETWEEN AND查询范围是包括边界值的
比如上面的18!
关于本节内容,到此结束~谢谢