where条件中使用case when来实现不同列的join
1. at_naizan表为奶站表,其中含有该省ID,地区ID,县市ID。2. ENFORCE为执法机构表,其中包含了该执法机构的执法范围,scope字段,有省级、地级、县级3. ENFORCEMAN为执法人员表,该表中包含了该人员所属的执法...
grouping_id、grouping、grouping set
最近一直在pub的开发版上转悠,跟高手们学到了很多东西,下面是其中的一道sql方面的题,在此转一下。表中数据如下: SQL> select *from plch_sales s; PRODUCT COUNTRY&nb...
left join,inner join,right join,cross join,full join
cross join是笛卡儿乘积就是一张表的行数乘以另一张表的行数left join第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回nullright join第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回...
natural join
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。 来看一下自然连接的例子: SQL> selecte.ename,e.sal,d.dname from emp e ,...
Foreign key 选项--on delete cascade、on delete set null
最近闲来无事,开始学习ocp课程,发现有很多细节的东西以前没用过,很值得一学,今天就是第一次看到on delete set null的选项。SQL> create table p(id number,dname varchar2(10)); 表已创建。 ...
round(date)函数
round(date)函数,将时间进行四舍五入,测试如下:SQL> select sysdate from dual;SYSDATE-----------------20090327 10:48:45SQL> select round(sysdate,'year') from dual;ROUND(SYSDATE,'YE-----------...
trunc(date)函数
将日期取整的函数,测试如下:SQL> select trunc(sysdate,'YEAR') FROM DUAL;TRUNC(SYSDATE,'YE-----------------20090101 00:00:00SQL> select trunc(sysdate,'mon') from dual;TRUNC(SYSDATE,'MO-------...
count(*)与count(1)有区别吗?
看到别人使用count(1)来统计记录数,据说是资源消耗少,今天做了个测试:先看count(*):[oracle@single bdump]$ sqlplus '/as sysdba'SQL*Plus: Release 9.2.0.4.0 - Production on Sat Mar 21 10:21:21 2009Copy...
sort merge join
什么情况下适合sort merge join:The optimizer can choose a sort merge join over a hash join for joining large amounts of data if any of the following conditions are true:The join condition between two ...
索引扫描(四)-索引全扫描
SQL> select table_name,index_name,column_name,column_position from user_Ind_columns where table_name='EMPLOYEES'; TABLE_NAME &...
case 函数的使用
例子:统计employees表中2000以下,2000-4000,4000以上范围内各自的工资总额,按照常规写法,需要写3条sql,分别统计这三个范围内的工资总和。使用case语句,可以用一条sql完成,且相应的资源消耗也降低。常规写法...
索引扫描(三)索引范围扫描与索引降序范围扫描
.当按照要对数据进行排序时,如果排序列为索引列,则优化器会略去排序的步骤,因为索引列本身已经做了排序的工作。SQL> select * from employees order by employee_id; Execution Plan----------------------...
索引扫描(二)-索引跳跃扫描
1. 关于索引跳跃扫描 举个例子说明,表employees上有2列sex,employee_id,在(sex,employee_id)上创建复合索引,这两列上的值分布类似于:('F',98)('F',100)('F',102)('F',104)('M',101)('M',103)('...
索引扫描(一)-聚簇因子
假设一个表中有9行记录,分布在3个block上,按照其中列col1的分布情况,分为以下两种情况:Block 1 Block 2 Block 3 ------...
并行度对优化器的影响
当表的并行度被设置为大于1时,如果where条件为范围而不是=,优化器更倾向于使用全表扫描,而不是索引范围扫描。SQL> alter table employees parallel(degree 5); Table altered. SQL> select * from emp...
影响优化器的几个参数
Controlling the Behavior. of the Query OptimizerThis section lists some initialization parameters that can be used to control the behavior. of the query optimizer. These parameters can be used to enab...
使用SQL Tuning Advisor
1. 创建sql tuning任务SQL> DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB;BEGIN my_sqltext :='SELECT /*+ ORDERED */ * ' &n...
nested loop join探讨
概述:本测试创建两个测试表,t1中有记录10万条,t2中记录10条。分别创造不同的条件,进行nested loop join,并比较不同条件下产生的逻辑读数量。在测试中均加了相应的hints,以避开优化器自动产生的执行计划。1. ...
rownum的处理机制(转)
在Oracle中,要按特定条件查询前N条记录,用个rownum就搞定了。 select * from emp where rownum <= 5 而且书上也告诫,不能对rownum用">",这也就意味着,如果你想用 select * from emp where rownum > 5 则是失败...
DDL包括那些操作
Data Definition Language StatementsData definition language (DDL) statements define, alter the structure of, and drop schema objects. DDL statements enable you to:Create, alter, and drop schema obj...