SQL 3. 高级数据过滤 - 5 范围值检测

原创 2011年01月25日 11:19:00

使用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提供了一个专门用于方位检测的语句BETWEEN ... AND, 他可以用来检测一个值是否处于某个方位中(包括范围的比阿杰支,也就是闭区间。) 使用方法为字段名 BETWEEN 左范围值 AND 右范围值 , 其等价于“字段名>= 左范围值 AND 字段名 <= 右范围值”。比如完成下面的功能“检索所有年龄在23岁~27岁之间的员工信息”,可以使用下面的SQL语句:

SELECT * FROM T_Employee WHERE  FAge BETWEEN 23 AND 27

 

+----------+-------+------+---------+
| FNumber  | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV001   | Tom   |   25 | 8300.00 |
| HR001    | Jane  |   23 | 4300.00 |
| HR002    | Tina  |   25 | 3300.00 |
| IT002    | NULL  |   27 | 2800.00 |
| SALES001 | Timmy |   25 | 5300.00 |
+----------+-------+------+---------+

 

---------------------------------------------------------------------------------

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

SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 and 3000)

or (FSalary BETWEEN 5000 and 8000)

 

+----------+-------+------+---------+
| FNumber  | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV002   | Jerry |   28 | 2300.00 |
| IT001    | Smith |   28 | 5500.00 |
| IT002    | NULL  |   27 | 2800.00 |
| SALES001 | Timmy |   25 | 5300.00 |
+----------+-------+------+---------+

 

 

数据库系统对BETWEEN AND进行了查询优化吗使用它进行范围之检测得到比其他方式更好的性能,因此在进行范围之检测的时候应该优先使用BETWEEN AND。

 

相关文章推荐

5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测

http://www.cnblogs.com/mr-totoro/p/5803821.html 据我们所知,有‘已知的已知’,有些事,我们知道我们知道;我们也知道,有 ‘已知的未知’,也...

海量数据挖掘MMDS week3:社交网络之社区检测:高级技巧

http://blog.csdn.net/pipisorry/article/details/49052255海量数据挖掘Mining Massive Datasets(MMDs) -Jure Les...

解析Oracle数据扫描 Oracle SQL查询优化 引导局部范围数据扫描的方法(3)

过滤型局部范围扫描        在日常应用开发过程中,经常会遇到需要判断满足某些查询条件的集合是否存在,其实这种操作本质上是一种特殊的过滤操作,既需要用一个集合为源,另一个集合为判断标准,使用这个...

SQL Server数据类型可接受值的范围

资料类型 可接受的值范围 整数值 bigi nt 自-2^63 至2^63-1 的整数值。 Int 自-2^31 至2^31-1 的整数值。 Smallint 自-2^15 到2^15-1 的...
  • jamex
  • jamex
  • 2012年01月09日 13:08
  • 571

线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析

1.知识点普及 2.案例说明:线程范围内的共享变量以及应用场景(转账,转入和转出);在线程内共享,在线程外独立 package com.itcast.family; impo...

SQL必知必会 笔记 第五章 高级过滤数据

5.1组合WHERE子句操作符(operator)用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符。5.1.1 AND操作符为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句...
  • veno813
  • veno813
  • 2015年04月14日 12:27
  • 268

数据库高级数据过滤之SQL操作符与SELECT子句

高级数据过滤 AND操作符 要通过不止一个列进行果过滤,可以使用AND操作符对WHERE子句附加条件,用在WHERE子句中的关键字 OR 操作符 OR操作符与AND操作符正好相反,它告诉DBMS检索匹...

java多线程并发库高级应用 之 线程范围内共享数据

转自:http://blog.csdn.net/xushuaic/article/category/1335611 笔记摘要:              所谓线程范围内共享数据...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月03日 19:13
  • 811

多线程并发库高级应用 之 线程范围内共享数据

笔记摘要:              所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL 3. 高级数据过滤 - 5 范围值检测
举报原因:
原因补充:

(最多只允许输入30个字)