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。

 

3.SQL Server DML触发器--检测对指定列的UPDATE或INSERT操作

本文摘自《锋利的SQL》:http://item.jd.com/10380652.html 14.1.3 检测对指定列的UPDATE或INSERT操作 对于INSERT或UPDATE触发器,可以使用U...
  • zhanghongju
  • zhanghongju
  • 2014年01月04日 17:44
  • 3134

int(4)和int(5)是否有区别?

MySQL类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列...
  • u012841191
  • u012841191
  • 2013年12月10日 10:59
  • 3290

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

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

优化原则测试1:先执行过滤掉大部份数据的SQL语句,通过过滤条件搭配减少结果集;

版本信息 SQL> select * from v$version; BANNER ---------------------------------------------------...
  • launch_225
  • launch_225
  • 2014年02月19日 11:48
  • 1156

MySQL 过滤数据——MySQL系列(三)

1、使用Where 子句 Where 子句位于Order by 前面 Where子句操作符 操作符 说明 = 等于 不等于 != 不等于 小于 小于等于 > 大于 ...
  • vvhesj
  • vvhesj
  • 2014年03月10日 19:15
  • 5988

3. 过滤和排序数据

过滤 使用WHERE子句,将不满足条件的行过滤掉。 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE ...
  • u011246325
  • u011246325
  • 2015年04月04日 14:15
  • 219

SQL语句:基础语句和高级函数学习总结

基本查询语句:(基础、重要)          1、distinct  select distinct 列名 from 表名   去重,查询不同的数据时。          2、where   s...
  • LPlanguage
  • LPlanguage
  • 2016年12月20日 11:32
  • 1594

php过滤提交数据 防止sql注入攻击

php过滤提交数据 防止sql注入攻击在SQL注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中。例如,假设有一个简单的登录数据库。这个数据库中的每个记录都有一个用户名字段...
  • ljh504429906
  • ljh504429906
  • 2017年07月14日 10:05
  • 398

SQL注入防御之二——注入关键词过滤(PHP)

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 概述  欢迎来到本人的SQL注入防御系列的第二篇文章,...
  • Tim_phper
  • Tim_phper
  • 2016年08月23日 10:51
  • 3397

Sql Server查询指定范围(一周、一月、本周、本月等)内的数据

查询当天日期在一周年的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0 ...
  • beyondqd
  • beyondqd
  • 2016年04月29日 14:37
  • 1788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL 3. 高级数据过滤 - 5 范围值检测
举报原因:
原因补充:

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