Oracle中的特殊判式
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中的特殊判式的更多相关文章
- Oracle中的rownum用法解析
注意:rownum从1开始: 1.rownum按照记录插入时的顺序给记录排序,所以有order by的子句时一定要注意啊! 2.使用时rownum,order by字段是否为主键有什么影响? 3 ...
- Oracle中rownum的基本用法
Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- Oracle中的自动增长字段
Oracle中的自动增长字段 Oracle 中不像MYSQL 和MSSQLServer 中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段. 在Or ...
- Oracle中没有 if exists(...)
对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法,这里先分析常用的三种,推荐使用最后一种 第一种是最常用的,判断count(*)的值是否为零,如下declare v ...
- 转:Oracle中的rownum不能使用大于>的问题
一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.< ...
- Oracle中rownum的用法
rownum是Oracle对查询结果进行顺序编号,第一行分配1,第二行2,以此类推.rownum不能以任何表的名称作为前缀. rownum这个伪字段可以用于控制返回的记录行数. 例如表:student ...
- oracle中to_date() 与 to_char() 日期和字符串转换
to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...
- ORACLE中常见的几种锁
ORACLE中常见的几种锁: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4 ...
随机推荐
- 网站如何从http升级成https
基本概念: HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少. HT ...
- MVC模式到传统风格的Spring MVC
现在我们要做个简单的基于servlet的MVC的模型,我们要有一个Product要从表单处获取. MVC中的M是模型,V是视图,C是控制器.视图负责应用的展示,模型封装了数据和业务逻辑,控制器负责接收 ...
- 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数
给定一个整数数组,除了某个元素外其余元素均出现两次.请找出这个只出现一次的元素.备注:你的算法应该是一个线性时间复杂度. 你可以不用额外空间来实现它吗? 详见:https://leetcode.com ...
- Web API 实体显示注释
我看园子里关于Web API的注释都是关于方法的,并没有显示实体注释的方法,今天花了一些时间搞了一下 其实注释的显示就是根据类库的XML文档文件生成的. 首先你要将所用到的类库生成XML文档文件: 在 ...
- js调用本地程序
前几天,做项目时候用到js调用本地的程序,找了好多资料,一种是写入注册表,一种是写一个浏览器插件,相对来说,写一个注册表更简单一点,因为需求很紧.下面就是我的总结,希望可以对你们有所帮助,具体从哪里找 ...
- ubuntu用户自定义的命令alias永久生效
cd ~ vi .bash_profile alias ll='ls -ltr' . .bash_profile ps:写在.bashrc终端断开就没了
- macOS 的 JDK 安装问题 (Homebrew)
Homebrew 介绍 Homebrew 是 macOS 下的一个非常好用的包管理工具, caskroom 则是基于 Homebrew 构建的一个强大的应用程序管理器. 具体用法可以餐参考 像 Mac ...
- 【转】哪个更快:Java堆还是本地内存
译文出处: shenzhang 原文出处:原文链接 使用Java的一个好处就是你可以不用亲自来管理内存的分配和释放.当你用new关键字来实例化一个对象时,它所需的内存会自动的在Java堆中分配.堆 ...
- subprocess模块详解2
1.call() 和run功能类似,都是接受一个列表里的参数. >>> import subprocess >>> a = subprocess.call([&qu ...
- jsp <%@ include %> 例子
<%@ include %>:所有代码包含进来之后一起进行处理,最终编译成一个servlet. jsp文件中添加top和bottom.jsp页面 empList.jsp <%@ pa ...