Oracle Sql高级编程 第1章 SQL 基础

SELECT  语句
一个查询语句在逻辑上的处理方式可能会与实际物理处理过程不同。Oracle 基于查询成本的优化器用来产生实际的 执行计划

查询语句的逻辑处理顺序
5Select <column list>
1from
1.1from  join   on
2where
3group by
having
6order by

可以把处理过程中的每一个步骤想象为生成一个临时的数据集。随着每个处理步骤的进行,这个数据集被不断的操作。

FROM 
注意在处理联接语句时按下面的顺序进行:
交叉联接
内联接
外联接

一般,排序是查询过程中开销相当大的一个处理,尤其是当数据量很大时。

INSERT

INSERT   INTO   HR.JOBS (JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)   VALUES   ( 'IT_PM' , 'Project Manager'   , 5000 ,   11000 )

INSERT   INTO   SCOTT.BONUS
  (ENAME, JOB, SAL)
    SELECT   NAME , JOB, SAL *   0.1   FROM   SCOTT.EMP;

INSERT   ALL   WHEN   SUM_ORDERS <   10000   THEN   INTO   SMALL_CUSTOMERS   WHEN   SUM_ORDERS >=   10000   AND   SUM_ORDERS <   100000   THEN   INTO   MEDIUM_CUSTOMERS   ELSE   INTO   LARGE_CUSTOMERS
    SELECT   CUSTOMER_ID,   SUM ( ORDER_TOTAL) SUM_ORDERS
      FROM   OE.ORDERS
     GROUP   BY   CUSTOMER_ID;


UPDATE

UPDATE   EMPLOYEES   SET   SALARY = SALARY *   1.1   WHERE   DEPARTMENT_ID =   90 ;
UPDATE   EMPLOYEES
     SET   SALARY =
       (   SELECT   EMPLOYEES2.SALARY   FROM   EMPLOYEES2   WHERE   EMPLOYEES2.EMPLID =   1 )


MERGE

MERGE   INTO   DEPT60_BONUSES B
USING   ( SELECT   EMPLID , SALARY, DEPTID   FROM   EMPLOYEES   WHERE   DEPTID =   60   ) E
ON   (B.EMPLID = E.EMPLID)
WHEN   MATCHED   THEN
    UPDATE
       SET   B.BONUS_AMT = E.SALARY *   0.2
     WHERE   B.BONUS_AMT =   0   DELETE
     WHERE   ( E.SALARY >   7500 )
WHEN   NOT   MATCHED   THEN
    INSERT
    (B.EMPLID, B.BONUS_AMT)
    VALUES
    (E.EMPLID, E.SALARY *   0.1 )   WHERE
    (E.SALARY <   7500   );



转载于:https://my.oschina.net/Yaland/blog/424959

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值