oracle sql 语句执行顺序

oracle sql 语句执行顺序,第1张

where 里面条件 and 是先执行 and 前面 还是后面条件

这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。

例如一个 学生表, 有学号,姓名,性别

其中 学号是主键, 姓名上面有个索引。

找 名字叫 强妹 的女生:

SELECT FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'

SELECT FROM 学生 WHERE 性别 = '女' AND 姓名='强妹'

数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的

比如表里面共有10000行。姓名叫 '强妹' 的只有一个。

那么通过索引,一步就定位到那一行。

然后再判断这一行数据的 性别字段, 是不是 = '女'

假如 姓名/性别 都没有索引呢?

那就是执行 全表扫描。

不分先后。

什么意思呢?

就是假如 表里面10000行数据。

那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。

并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。

sql语句的and和or运算符属于相同优先级,按结合性进行从左到右结合。

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

优先级从高到低依次递减,最上面具有最高的优先级,逗号 *** 作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一优先级的运算符按结合性进行从左到右结合。

扩展资料:

每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。

各种运算符间的优先级如下:数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。括号内的运算总是最优先计算。

结果是不一样的,因为SQL执行这类条件判断时是有先后顺序的,具体顺序如下:

(按最优先到最后,从左至右排列)

()、not、and、or

最优先执行的是()内的判断条件,然后到not,再到and,最后才判断or

有两种方法:

方法一: 使用linked_server_namecatalogschemaobject_name,例如:

select from ERPCRMINQ

linked_server_name Linked server referencing the OLE DB data source

catalog Catalog in the OLE DB data source that contains the object

schema Schema in the catalog that contains the object

object_name Data object in the schema

SQL Server用linked_server_name取linked server相关配置信息,然后将catalog、schema、object_name作为参数传递给OLEDB。例如远程链接服务器为SQL Server时catalog为数据库实例名,schema为owner id (dbo);链接服务器为Oracle时 (OLEDB),catalog为空,schema为用户

注意点:

a) 远程链接服务器为Oracle时schema、object_name必须大写(其他类型的不清楚),否则会报错

消息 7314,级别 16,状态 1,第 1 行

链接服务器 "ERP" 的 OLE DB 访问接口 "MSDAORA" 不包含表 ""CRM""INQ""。该表不存在,或者当前用户没有访问该表的权限。

b) 必须使用完整的名称。例如SQL Server本地执行sql,dbo可以省略不写,使用远程链接服务器时则必须提供

方法二:使用openquery,例如:

select

from openquery(ERP,'select t from(select inq,rownum as rindex from inq order by img01) t where trindex>=51 and trindex<=100')

优点:

a) SQL Server只是将openquery中的sql发送给远程服务器执行,因此可以使用远程链接服务器的所有sql语法(例如Oracle语法),sql对象也不必大写

b) 数据类型的异常很少(个别情况下还是会发生)

c) openquery的写法同样可用于update、insert、delete

d) 链接服务器为Oracle时,schema不必出现在sql语句中

关于使用链接服务器方面的一些限制、前提条件,可以参考>

sql语句中按照优先级确定and和or的先后顺序,and的优先级要高于or。sql是一种特殊的编程语言,多被运用在数据库查询,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

1、为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测一下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。

2、sql数据查询语言也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDERBY,GROUPBY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

sql是顺序执行的,你没考虑并发影响吧,举个例子:

A 用户触发 物料档案 的trigger

执行到 update BOM 时 刚好B用户也触发 物料档案 的trigger 而且执行完了

也就是说这是 BOM上的trigger是可用的

所以会出现你说的情况。

以上就是关于oracle sql 语句执行顺序全部的内容,包括:oracle sql 语句执行顺序、sql语句的and和or怎么确定执行的先后顺序、SQL语句的执行顺序是怎么样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存