SQL Select语句完整的执行顺序:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。
oracle 语句提高查询效率的方法
1:.. where column in(select * from ... where ...);
2:... where exists (select 'X' from ...where ...);
第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询
使用EXISTS,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间
Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中
选择最有效率的表名顺序(只在基于规则的优化器中有效)
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。
WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
查看更多关于【Oracle教程】的文章
去重复的sql(Oracle) 去重复的英文
1.利用group by 去重复2.可以利用下面的sql去重复,如下 1) select id,name,sex from (select a.*,row_number() over(partition by a.id,a.set order by name) su from test a ) where su=1 2)select id,name,sex from (select a.*,row_number() over(p
0评论2023-02-10893
Oracle SQL七次提速技巧
以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop execute imme
0评论2023-02-10755
SQL ORACLE case when函数用法
case when 用法(1)简单case函数:格式: case 列名 when 条件值1 then 选项1 when 条件值1 then 选项2...... else 默认值 end例如: select case job_level when '1' then '1111' when '2' then '2222' when '3' then '3333
0评论2023-02-10564
ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
1.添加字段:alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ;2.添加备注:comment on column 库名.表名.字段名 is '输入的备注'; 如: 我要在ers_data库中 test表 document_type字段添加备注 comm
0评论2023-02-10584
MySQL与Oracle 差异比较之六触发器
触发器编号类别ORACLEMYSQL注释1创建触发器语句不同create or replace trigger TG_ES_FAC_UNIT before insert or update or delete on ES_FAC_UNIT for each rowcreate trigger `hs_esbs`.`TG_INSERT_ES_FAC_UNIT` BEFORE INSERT on `hs_esbs`.`es_fac_u
0评论2023-02-10914
Oracle的HINT可以强制指定SQL的执行计划,比如选择索引、表的连接顺序以及表的连接方式等等。(转)
在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_tables; //当前用户的表 select table_name from all_tables; //所有用户的表 select table_name from dba_tables; //包
0评论2023-02-10857
Oracle sql 子字符串长度判断
Oracle sql 子字符串长度判断 select t.* from d_table t WHEREsubstr(t.col,1,1)='8' and instr(t.col,'/')0 and length(substr(t.col,1,instr(t.col,'/')))5; 字符串的前两位都是数字:select * from d_table t WHERE regexp_like(substr(t.col,1,2), '^[
0评论2023-02-10759
Oracle、MySql、Sql Server比对
MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议。假设你在一个遵循GPL的***(开源)项目中使用MySQL,那么你能够遵循GPL协议免费使用MySQL。否则,你须要购买MySQLAB制定的那个商业许可协议。Windows $
0评论2023-02-10441
Oracle 存储过程,临时表,动态SQL测试
--创建事务级别的结果临时表create global temporary table tmp_yshy( c1 varchar2(100), c2 varchar2(100))on commit delete rows;--创建事务级别的存储sql语句的临时表create global temporary table tmp_sql( c1 varchar2(4000))on commit delete rows;测
0评论2023-02-10508
MySQL与Oracle的区别之我见 mysql oracle 区别
1. 大的方面(宏观)Oracle为商用数据库,行业中占据相当的地位:市场占比2012年为40%。开发、管理资源相当丰富,有自己的metalink,我也曾用过,有什么问题,都能在那里得到较快速度的解决。开发用了近10年,虽然有些功能用起来挺鸡肋的(像分页),但它在OL
0评论2023-02-10801
sql: sybase 和 oracle 比较
1. sybase 和 oracle 比较 http://blog.itpub.net/14067/viewspace-1030014/Oracle采用多线索多进程体系结构Sybase采用单进程多线索体系结构Oracle和Sybase都采用多线索。采用多线索的模式,能用较少的线索管理大量的用户进程;并且,线索进程是动态可调整的
0评论2023-02-10504
公司Oracle生产库某用户中毒【AfterConnect.sql】
一、数据库中毒后症状1、无法通过客户端远程登录数据库。2、数据库会话连接被大量占用,进程数或会话数耗尽。3、所有的会话连接来自于数据库用户内部——非外部应用或者客户端占用。4、扩大会话数或者进程数,重启数据库服务后,会话连接数迅速占满。5、数据
0评论2023-02-10948
Oracle,查询表的创建时间和最后修改时间sql
SELECT * FROM USER_TABLES 查看当前用户下的表SELECT * FROM DBA_TABLES 查看数据库中所有的表SELECTCREATED,LAST_DDL_TIME from user_objects where object_name=upper('表名')SELECT CREATED, LAST_DDL_TIMEFROM USER_OBJECTSWHERE OBJECT_NAME = 'PDCA_NE
0评论2023-02-10393
oracle下拼同比环比查询sql方法
拼接方法: /// summary/// 生成计算同比环比查询语句/// table:表名称;statColumns:要统计的值字段;yearColumn:年份字段名;monthColumn:月份字段名;joinColumns:除年月外的连接条件/// --上期无值或0本期有值不为0:1/// --上期有值不为0
0评论2023-02-10642