范围值检测

使用IN语句只能进行多个离散值的检测,如果要实现范围值的检测就非常麻烦甚至不可能了。比如我们要完成下面的功能“检索所有年龄介于23岁到27岁之间的员工信息”,如果用IN语句来实现的话就必须列出此范围内的所有可能的值,SQL如下:


SELECT * FROM T_Employee WHERE FAGE IN(23,24,25,26,27)

执行完毕我们就能在输出结果中看到下面的执行结果:

当范围内的值比较多的时候使用这种方式非常麻烦,比如“检索所有年龄介于20岁到60岁之间的员工信息”就要列出20到60之间的每一个值,这个工作量是非常大的。而且这种方式也无法表达非离散的范围值,比如要实现“检索所有工资介于3000元到5000元之间的员工信息”的话就是不可能的,因为介于3000到5000之间的值是无数的。

这种情况下我们可以使用普通的“大于等于”和“小于等于”来实现范围值检测,比如完成下面的功能“检索所有年龄介于23岁到27岁之间的员工信息”,可以使用下面的SQL语句:


SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE <=27

执行完毕我们就能在输出结果中看到下面的执行结果:

这种方式能够实现几乎所有的范围值检测的功能,不过SQL提供了一个专门用语范围值检测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间)。使用方法如下“字段名BETTWEEN左范围值AND右范围值”,其等价于“字段名>=左范围值AND字段名<=右范围值”。比如完成下面的功能“检索所有年龄介于23岁到27岁之间的员工信息”,可以使用下面的SQL语句:


SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27

执行完毕我们就能在输出结果中看到下面的执行结果:

使用“BETTWEEN AND”我们还能够进行多个不连续范围值的检测,比如要实现“检索所有工资介于2000元到3000元之间以及5000元到8000元的员工信息”,可以使用下面的SQL语句:


SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000)

执行完毕我们就能在输出结果中看到下面的执行结果:

数据库系统对“BETTWEEN AND”进行了查询优化,使用它进行范围值检测将会得到比其他方式更好的性能,因此在进行范围值检测的时候应该优先使用“BETTWEEN AND”。需要注意的就是“BETTWEEN AND”在进行检测的时候是包括了范围的边界值的(也就是闭区间),

如果需要进行开区间或者半开半闭区间的范围值检测的话就必须使用其他的解决方案了。

posted @ 2018-10-20 00:51  尐鱼儿  阅读(336)  评论(0编辑  收藏  举报