使用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。