Oracle中的特殊判式

除了逻辑运算之外,Oracle提供了一些特殊判式。这些判式可以用来生成更加复杂和灵活的查询条件。本节将着重介绍以下几种判式。

Between: 取值范围

In: 集合成员测试

Like: 模式匹配

Is null: 空值判断

All,somne,any:数量判断。

Exists:存在性判断

between——范围测试

between判式,用于判断某个值是否在另外两个值之间。这些值可以为数值型、字符串和日期型。使用betwwen判式来获得ID号在1-5之间的员工信息。

select * from t_employees where employee_id between 1 and 5;

betwwen判式同样可以应用于字符串和日期型。字符串是按照字母表的顺序进行比较,而日期型是按照日期的先后顺序进行比较。

select * from t_employees where 'b' between 'b' and 'c';

select * from t_employees where 'b' between 'bc' and 'c';

注意与说明:between判式与>=、<=的组合是等价关系。但是,效率上要比后者差。

in——集合成员测试

in用于判断某个值是否一个集合的成员。

select * from t_employees where status in('NEW', 'ACT');

值得注意的是,in判式中的集合的成员的数据类型可以不一致,例如,select * from t_employees where status in('NEW', 'ACT', sysdate, 1)中的数据类型包含了字符串、日期型和数值型。

like——模式匹配

like判式的最大特点在于,可以使用通配符。其通常的应用场景为处理模糊查询。

select * from t_employees where employee_name like '钟%';

如果要求字符串中含有原义字符"%",例如,含有百分比的字符串。那么,like判式应写作:like '钟\%' escape '\'。Oracle会首先解释escape关键字,并将其后的字符"\"解释为转义字符。那么在"钟\%"中的"%"不再表示通配符,而是表示原义字符"%"。

"_"(下划线)是可用于like判式的另一个通配符,该通配符表示一个任意的字符。

is null——空值判断

在逻辑判断中,对于列值为空的判断,不能使用=或者<>。oracle对与空值的判断提供了专门的判式——is null。例如,为了获取表t_employees中员工信息不全的记录,可以利用如下所示的查询语句。

select * from t_employees

where employee_id is null

or employee_name is null

or work_years is null

or status is null;

exists——存在性判断

in判式用于判断表的列值是否存在于列表(集合)中。而exists判式则可用于判断查询结果集合是否为空。例如,为了查询出表t_employees所存储的员工信息中,哪些员工存在于工资表中,即可利用exists判式。

select * from t_employees e

where exists(select * from t_salary where employee_id = e.employee_id);

all,some,any——数量判断

all,some和any判式的作用对象为记录集合。all表示,记录集中的所有记录,some表示其中的一些记录,any判式则表示其中的任意记录。例如,在员工工资表t_salary中,为了查找高于id为4和5的工资信息,即可使用all判式。

select * from t_salary where employee_id = 4 or employee_id = 5;

select * from t_salary where salary > all(select distinct salary from t_salary where employee_id = 4 or employee_id = 5);

select * from t_salary where salary > some(select distinct salary from t_salary where employee_id = 4 or employee_id = 5);

此时的some判式实际相当于逻辑运算中的or运算,即salary>6000 or salary>7000。此时,使用any判式,将返回同样的结果。

Some,any,all的用法和区别

select ename,sal
From emp
Where sal > any(select sal from emp where deptno = 10);
从emp表中选出大于部门10中最小工资的的人的姓名和工资。
小结:any是大于最小,小于最大。(当然此处使用some也可以,但any语义更为直接)

select ename,sal
From emp
Where sal = some(select sal from emp where deptno = 30) and deptno not in (select deptno from emp where deptno = 30);
从emp表中选出不是30号部门,但工资和30号部门任何一个人的工资相等的人的姓名和工资。
小结:等于任意一个。

select ename,sal
From emp
Where sal > all(select sal from emp where deptno = 20);
从emp表中选出工资大于20号部门最大工资的人的姓名及工资。
小结:大于最大,小于最小。

Oracle中的特殊判式的更多相关文章

  1. Oracle中的rownum用法解析

    注意:rownum从1开始:  1.rownum按照记录插入时的顺序给记录排序,所以有order by的子句时一定要注意啊!  2.使用时rownum,order by字段是否为主键有什么影响?  3 ...

  2. Oracle中rownum的基本用法

    Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...

  3. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  4. Oracle中的自动增长字段

    Oracle中的自动增长字段 Oracle 中不像MYSQL 和MSSQLServer 中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段. 在Or ...

  5. Oracle中没有 if exists(...)

    对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法,这里先分析常用的三种,推荐使用最后一种 第一种是最常用的,判断count(*)的值是否为零,如下declare  v ...

  6. 转:Oracle中的rownum不能使用大于>的问题

    一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.< ...

  7. Oracle中rownum的用法

    rownum是Oracle对查询结果进行顺序编号,第一行分配1,第二行2,以此类推.rownum不能以任何表的名称作为前缀. rownum这个伪字段可以用于控制返回的记录行数. 例如表:student ...

  8. oracle中to_date() 与 to_char() 日期和字符串转换

    to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...

  9. ORACLE中常见的几种锁

    ORACLE中常见的几种锁: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4 ...

随机推荐

  1. Include,Forward,sendRedirct的区别(转)

    三者在servlet中的最大区别是: Include和Forward:将当前请求转到另外一个JSP或者servlet处理. sendRedirct:将当前请求返回到浏览器,带上要redirect的UR ...

  2. iphone 开发Categories 、Extensions 区别 --转

    Category和Extension这两个概念,即便对于Java程序员,可能也会感到陌生.这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法 ...

  3. 151 Reverse Words in a String 翻转字符串里的单词

    给定一个字符串,翻转字符串中的每个单词.例如,给定 s = "the sky is blue",返回 "blue is sky the".对于C程序员:请尝试用 ...

  4. SOLR-disMax查询参数

    dismax参数用于处理用户输入的简单短语,并根据字段的重要度进行加权查询,查询范围为多个字段区域.dismax会忽略搜索字符串中的 "AND","OR", & ...

  5. Linux常用命令——tac、bc

    1.从文件尾到文件头一页一页的显示内容 tac xxx.log |more //tac命令与cat命令相反,从文件尾开始读文件 2.shell下科学计算工具bc echo "scale=5; ...

  6. 01_C++学习笔记_入门

    1.float类型只能表示数字里面的前6位或者前7位.也就是说c++只能保证float类型的数字的前6位是正确的.如果要求的精度更高的话,请使用double和long double. float精度是 ...

  7. C#中的委托(转)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  8. 外文翻译 《How we decide》被情感愚弄 第三节

    本科论文答辩终于结束啦,一切都要继续回到正轨. 这是第三章章最后一节 书的导言 本章第二节 本章第一节 "信用卡是我的敌人."Herman Palmer这样说到.在平日,Herma ...

  9. vmware让虚拟机内外网络可互访

    以下方法可使主机可以ping通虚拟机,虚拟机也可以ping通主机 首先对虚拟机设置 然后设置虚拟机,假设主机的ip是10.0.0.9,那虚拟机的ip应如下设置: 其中ip地址任意设置一个,但要求跟主机 ...

  10. 全文索引Elasticsearch,Solr,Lucene

    最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 Solr 服务 ...