oracle逻辑运算符与其优先级简介

oracle逻辑运算符与其优先级简介,第1张

Oracle的逻辑运算符也是用在SQL语句中必不可少的因素,一共有三个

逻辑运算符

意义

and

双值运算符,如果左右两个条件都为真,则得到的值就为真

or

双值运算符,只要左右两个条件有一个为真,则得到的值就为真

not

单指运算符,如果原条件为真,则得到真,如果元条件为假,反之如果原条件为假,则结果为真

Oracle的逻辑运算符也是用在SQL语下面使一些例子:

Select

*

from

emp

where

sal

>

2000

and

job

=

‘SALESMAN'

寻找那些工资高于2000的且职位为销售的职员。

Select

*

from

emp

where

job

=

‘CLERK'

or

deptno

=

20

寻找那些工作为CLERK或者所在部门标号为20的职员的列表

Select

*

from

emp

where

not

(sal

>

3000

or

sal

<

1500)

寻找那些工资既不大于3000也不小于1500,也即在1500到3000范围的员工,相当于:select

*

from

emp

where

sal

between

1500

and

3000

结合到前面所列出的各类运算符,在这里汇总一下oracle中所有运算符的优先级句中必不可少的因素,一共有三个

运算符

级别

算术运算符(即‘+',‘-',‘*',‘/')

1

连接运算符(即‘||')

2

比较运算符(即‘>',‘>=',‘<',‘<=',‘<>')

3

Is

[not]

null,[not]

like,[not]

in

4

[not]

between-and

5

not

6

and

or

通常使用‘()'可以改变运算符的优先级。

需要注意的是and的优先级要优于or,也就是说

下面的语句

Select

*

from

emp

where

sal

<

1500

or

sal

>=

2000

and

job

=

‘ANALYST'

等价于

Select

*

from

emp

where

sal

<

1500

or

(sal

>=

2000

and

job

=

‘ANALYST')

而不是你所预期的

Select

*

from

emp

where

(sal

<

1500

or

sal

>=

2000)

and

job

=

‘ANALYST'

一般我们即使我们要表达第一个语句所要表达的意思,为了避免误解,都不采取第一种写法,而是用括号来表明我们要先算后面的部分。

总结

本文关于oracle逻辑运算符与其优先级简介就到这里,希望对大家有所帮助。感兴趣的朋友可以参阅:Oracle

RMAN自动备份控制文件方法介绍 、 oracle逻辑结构分析 、

oracle

数据库启动阶段分析 、

oracle

虚拟专用数据库详细介绍等。有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对脚本之家网站的支持。

(1)工作这么多年,这个符号完全没用过,难道“=”不安全。

(2)这个符号的意思,我猜到了一些,应该是<=与>=的合体,这样就只能取等于,所谓的安全的等于应该就是这个意思,两个判断,即大于等于又小于等于。

(3)不用纠结这个符号,只要记住就好,只要真正能用到的时候知道有这么个东西就好(个人感觉能用到的时候应该不多)。

最后祝学习顺利。

从以上程序的输出信息可以得出结论,短路不会浪费时间在无意义的计算上。

形式为exp1

&&

exp2,如果&&运算符左边的运算表达式exp1为false,那么其右边的运算表达式exp2不进行计算,因为&&运算符已经知道完整的表达式不可能是true,所以直接返回false

形式为exp1

||

exp2,如果||运算符左边的运算表达式exp1为true,那么其右边的运算表达式exp2不进行计算,因为||运算符已经知道完整的表达式不可能是false,所以直接返回true

下面来讨论oracle的逻辑运算符是否短路,本人的测试数据库是oracle

database

10g

enterprise

edition

release

10.2.0.1.0

首先创建一个测试function

create

or

replace

function

f

return

number

isbegindbms_output.put_line('f')return(1)end

f

这个function的作用是用来验证是否被执行,如果执行会打印出字符串“f”

(1)验证sql语句的逻辑运算符是否短路

select

'x'

from

dual

where

(1

=

0

and

f

=

1)--打印出f

select

'x'

from

dual

where

(1

=

1

or

f

=

1)--没有打印信息

说明sql语句中的逻辑运算符and不具备短路功能,而or具备短路功能。

(2)验证plsql语句的逻辑运算符是否短路beginif

1

=

0

and

f=1

thennullend

ifend--没有打印信息beginif

1

=

1

or

f=1

thennullend

ifend--没有打印信息


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6777017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存