Oracle笔记-Multitable INSERT 的用法

来源:互联网 发布:淘宝怎么投诉天猫超市 编辑:程序博客网 时间:2024/05/16 17:30
 

        前言:为避免日趋衰退的记忆力,转载参考文章,以供日后查阅。

一、Insert基础用法

语法:

    Insert Into 表名 (字段1,字段2,字段3...)

    Values (值1,值2,值3...)

例子:

INSERT INTO departments(department_id, department_name,
manager_id, location_id)
VALUES      (70, 'Public Relations', 100, 1700);

语法:

    Insert Into 表名 (字段1,字段2,字段3...)

    select 语句

不做任何解释,实在是没啥好说的�_�,注意别跟create table ...as select一样,insert中的select前面可没as ^_^

二、Unconditional INSERT ALL 用法

直接拿例子了:

INSERT  ALL
   INTO sal_history VALUES(EMPID,HIREDATE,SAL)
   INTO mgr_history VALUES(EMPID,MGR,SAL)
   SELECT employee_id EMPID, hire_date HIREDATE,
                  salary SAL, manager_id MGR
   FROM  employees
   WHERE employee_id > 200;

解释:将select查询出来的结果,每返回一行就分别插入表sal_history 和mgr_history 中,优点就是只做一次查询即可分别查询2个表,假如使用基础用法,将进行2次查询。

三、Conditional INSERT ALL

还是直接拿例子:

INSERT ALL
    WHEN SAL > 10000 THEN
        INTO sal_history VALUES(EMPID,HIREDATE,SAL)
   WHEN MGR > 200   THEN
       INTO mgr_history VALUES(EMPID,MGR,SAL)
   SELECT employee_id EMPID,hire_date HIREDATE, 
                  salary SAL, manager_id MGR
   FROM   employees
   WHERE  employee_id > 200;

解释:将select查询出来的结果,每返回一行就判断,SAL > 10000 就插入表sal_history ,MGR > 200就插入mgr_history ,优点和前面提到一样。

四、Conditional FIRST INSERT

仍然是例子:

INSERT FIRST
   WHEN SAL  > 25000          THEN
       INTO special_sal VALUES(DEPTID, SAL)
   WHEN HIREDATE like ('%') THEN
      INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
   WHEN HIREDATE like ('�%') THEN
      INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
   ELSE
      INTO hiredate_history VALUES(DEPTID, HIREDATE)
   SELECT department_id DEPTID, SUM(salary) SAL,
                  MAX(hire_date) HIREDATE
   FROM   employees
   GROUP BY department_id;

解释:将select查询出来的结果,每返回一行就判断,SAL  > 25000就插入表special_sal ,否则HIREDATE like ('%') ,符合就插入hiredate_history_00,前面2个条件还是不成力,就判断HIREDATE like ('�%') ,符合就插入表hiredate_history_99 ,前面3个条件都不符合,只好插入表hiredate_history 了。

打完这我都头晕了,假如学过程序设计,看下面的清晰明了:

if  SAL  > 25000 then

    INTO special_sal VALUES(DEPTID, SAL)
else

(

    if HIREDATE like ('%') THEN

         INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
    else

        (

            if HIREDATE like ('�%') THEN

                INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
            else

                INTO hiredate_history VALUES(DEPTID, HIREDATE)
        )

 )

假如还看不理解,看官方的这句话吧,“If the first WHEN clause evaluates to true, the subsequent WHEN clauses for this row should be skipped.”


五、Pivoting INSERT

最后还是例子:

INSERT ALL
   INTO sales_info VALUES (employee_id,week_id,sales_MON)
   INTO sales_info VALUES (employee_id,week_id,sales_TUE)
   INTO sales_info VALUES (employee_id,week_id,sales_WED)
   INTO sales_info VALUES (employee_id,week_id,sales_THUR)
   INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
              sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;

解释:老实说,看不出有啥用法,真的非要说,咱就把它当作行列转换吧,如果上面表在加多一列,比如INTO sales_info VALUES (employee_id,week_id,week_which,sales_MON) 改成 INTO sales_info VALUES (employee_id,week_id,'星期一',sales_MON)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机发短信说程序发生错误怎么办 派派游戏崇物等级低怎么办 轻微事故没有报警后面有问题怎么办 苹果6sp手机接电话声音小怎么办 用手机号办的移动宽带到期了怎么办 联通忘了宽带的用户名和密码怎么办 宽带联通移机附近没有端口怎么办 电信卡怎么改服务密码忘记了怎么办 路由器重置宽带账号密码忘了怎么办 重置路由器后不知道宽带密码怎么办 欠费后重新缴费宽带连接不了怎么办 华硕路由器忘记账号密码忘了怎么办 光纤猫光信号闪红灯不能上网怎么办 被传销洗了脑的人怎么办 辞职了评职称年度考核表怎么办 我是饭店饭店欠供货商的钱多怎么办 mac电脑ps卡住了点不了怎么办 高考自愿民族栏要改为民族怎么办 法院拆消裁定后再审有错怎么办 重定向语句前面有文件路劲怎么办 您上传的图片大小超过3M怎么办 两个人打架被拍视频上传了怎么办 小米手机打开后一直出现英文怎么办 百度云分享文件含有违规内容怎么办 百度网盘下载说本地空间不足怎么办 绘声绘影X9将滤镜拖到视频怎么办 苹果手机中间的按钮没用了怎么办? 图片怎么发的在百度里面应该怎么办 学java刚看的视频就忘了怎么办 qq上传照片一直显示排队中怎么办 微信支付不小心重复付款怎么办 学习通上传视频时 文件过大怎么办 电脑死机了怎么办 也不能关机了 还没发货淘宝退款卖家不处理怎么办 还没发货申请退款卖家不处理怎么办 快递写错电话被更改收货信息怎么办 货在派送中快递地址填错了怎么办 老板损坏了你保管的器材怎么办 闲鱼买家说不合适要退货怎么办 日本邮便局的单号我忘了怎么办 小米盒子自带播放器被删除了怎么办