读书频道 > 数据库 > Oracle > 从零开始学Oracle
8.1.6 BETWEEN、IN和LIKE范围查询
2012-09-27 16:53:09     我来说两句 
收藏    我要投稿   

本文所属图书 > 从零开始学Oracle

本书用简单易懂的实例和大量的图示,深入浅出地介绍了Oracle数据库的操作与编程方面的知识。作者以实际工作为切入点,详细介绍了Oracle数据库的基础知识及PL/SQL程序设计实战的知识。本书共分为17章,主要介绍了...  立即去当当网订购

前面介绍的WHERE子句都是用于比较单个值,如果要查询一定范围内的数据,可以使用Oracle提供的范围操作符。范围操作符可以比较一定范围的数据,比如比较两个数字值之间的值,或者是使用LIKE操作符进行模糊查询,在Oracle SQL中可以使用的范围操作符包含:

 BETWEEN…AND操作符:要比较的值是否在BETWEEN和AND指定的两个值之间。
 IN操作符:要比较的值是否在IN语句后指定的值列表中间。
 LIKE:通过使用“_”或“%”通配符来匹配一个字符串模板。

1.BETWEEN操作符

举例来说,要查询员工薪资在1500~2500之间的员工信息,可以使用BETWEEN..AND语句,如下语句所示:

SQL> SELECT empno 员工编号, ename 员工名称, job 职别, mgr 上级经理, hiredate 雇佣日期, sal 工资
          FROM emp
         WHERE sal BETWEEN 1500 AND 2500;


     员工编号 员工名称 职别         上级经理  雇佣日期       工资
     ------------------------------------------------------------
      7369 史密斯     职员             7902 17-12月-80     1755.2
      7499 艾伦       销售人员         7698 20-2月 -81       1700
      7788 斯科特     职员             7566 09-12月-82     1760.2
      7844 特纳       销售人员         7698 08-8月 -81       1600
      7903 通利       职员                   04-12月-81       2000
      7904 罗威       职员                   08-12月-81       2000
已选择6行。

实际上在使用BETWEEN和AND操作符时,Oracle会将该语句转换为一对AND条件,因此上面的语句被Oracle翻译成如下的语句:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE sal >= 1500 AND sal <= 2500;

注意:使用BETWEEN..AND并没有显著地提高性能,但是逻辑上给了用户一种更接近自然语言的表示方式。

对于日期类型的查询,也可以使用BETWEEN..AND来实现,例如要查询1981年1月1日到1981年12月31日之间入职的员工信息,可以使用BETWEEN..AND语句完成这个范围的选择,示例语句如下所示:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE hiredate BETWEEN TO_DATE ('1981-01-01', 'YYYY-MM-DD')
                    AND TO_DATE ('1981-12-31', 'YYYY-MM-DD');

在语句中为了匹配hiredate这个日期类型,使用了TO_DATE将字符串类型的日期转换成了日期类型。

2.IN操作符

IN操作符允许在一组值中进行选择,它用来判断列值是否在IN子句指定的值列表中。如果要查询emp员工表中员工的职位属于销售人员、职员、分析人员之间的员工,就可以使用IN关键字来查询。由于员工入职表是字符串类型的字段,因此必须要使用单引号进行分隔,如下面的语句所示:

SQL> SELECT empno 员工编号, ename 姓名, job 职位, mgr 经理, hiredate 雇佣日期, sal 薪资
          FROM emp
         WHERE job IN ('销售人员','职员','分析人员');
     员工编号 姓名      职位            经理  雇佣日期        薪资
     --------------------------------------------------------------------
      7369 史密斯     职员             7902 17-12月-80       1755.2
      7499 艾伦       销售人员         7698 20-2月 -81       1700
      7521 沃德       销售人员         7698 22-2月 -81       1350
      7654 马丁       销售人员         7698 28-2月 -81       1350
      7788 斯科特     职员             7566 09-12月-82       1760.2
      7844 特纳       销售人员         7698 08-8月 -81       1600
      7876 亚当斯     职员             7788 12-1月 -83       1440
      7900 吉姆       职员             7698 03-12月-81       1050
      7902 福特       分析人员         7566 03-12月-81       3600
      7903 通利       职员                   04-12月-81       2000
      7904 罗威       职员                   08-12月-81       2000
已选择11行。

注意:IN条件中可以使用任何数据类型,对于字符或日期,必须将其放在单引号中。

对于数字类型来说,例如要查询职员的上级经理为7698和7839的员工列表,由于emp表中的mgr是数字类型,因此不需要使用单引号,查询语句如下所示:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE mgr IN (7698, 7839);   
  
实际上当使用IN作为查询条件进行查询时,Oracle的SQL引擎将其转换为一组OR运算符查询,上面的查询语句最终会转换为如下的OR查询语句:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE mgr = 7698 OR mgr = 7839;   

3.LIKE操作符

LIKE操作符会对字符串值进行基于通配符的搜索,因此通常将使用LIKE操作符的查询称为模糊查询,LIKE操作符后面指定的搜索条件既可以包含文字,也可以包含数字或日期值。在LIKE语句中主要使用如下的两个通配符。

 “%”通配符:可以匹配一个或多个字符。
 “_”通配符:匹配单一字段\符。

使用LIKE操作符通常在不知道要搜索的确切的值的时候,能够通过使用通配符进行组合要查询的值。比如要查询员工名称是以大写字母J开头的员工列表,则可以使用如下的SQL语句:

SQL> SELECT empno 员工编号, ename 姓名, job 职位, mgr 经理, hiredate 雇佣日期, sal 薪资
      FROM emp
     WHERE ename LIKE 'J%';
     员工编号 姓名      职位                经理  雇佣日期           薪资
     -----------------------------------------------------------------
      7566 JONES      MANAGER         7839  02-4月 -81    3570
      7900 JAMES      CLERK           7698  03-12月-81     1050
      1587 JOHN                                   05-3月 -87    1000

除了模糊搜索字符串以外,还可以使用LIKE操作符对日期类型进行比较,例如要查询1981年入职的员工,可以像使用字符串搜索一样使用LIKE操作符,如下语句所示:

SQL> SELECT empno 员工编号, ename 姓名, job 职位, mgr 经理, hiredate 雇佣日期, sal 薪资
          FROM emp
         WHERE hiredate LIKE '%81';
     员工编号 姓名      职位            经理  雇佣日期        薪资
     ---------- --------------- ------------------------- ---------- ---------
      7499 艾伦       销售人员         7698 20-2月 -81       1700
      7521 沃德       销售人员         7698 22-2月 -81       1350
      7566 约翰       经理             7839 02-4月 -81       3570
      7654 马丁       销售人员         7698 28-2月 -81       1350
      7698 布莱克     经理             7839 01-3月 -81       2850
      7782 克拉克     经理             7839 09-5月 -81       3587.05
      7839 金         老板                   17-11月-81       8530.5
      7844 特纳       销售人员         7698 08-8月 -81       1600
      7900 吉姆       职员             7698 03-12月-81       1050
      7902 福特       分析人员         7566 03-12月-81       3600
      7903 通利       职员                   04-12月-81       2000
      7904 罗威       职员                   08-12月-81       2000
已选择12行。

上面的语句演示了使用“%”通配符进行模糊匹配,另一个通配符“_”仅匹配单个字符,比如要查询emp表中员工姓名第3个字符为A的员工信息,可以使用如下的SELECT语句:

SQL> SELECT empno 员工编号, ename 姓名, job 职位, mgr 经理, hiredate 雇佣日期, sal 薪资
      FROM emp
     WHERE ename LIKE '__A%';
     员工编号 姓名      职位               经理  雇佣日期           薪资
     --------------------------------------------------------------------
      7698 BLAKE      MANAGER          7839 01-3月 -81        2850
      7782 CLARK      MANAGER          7839 09-5月 -81        3260.95
      7876 ADAMS      CLERK            7788 12-1月 -83       1440

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:8.1.5 指定查询条件
下一篇:8.1.7 处理NULL列值
相关文章
图文推荐
3.6 存储管理工具Ce
3.4.5 Interleaving
3.4 Exadata存储架构
3.3.3 SDP协议
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站