Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23042
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 138
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-07 12:49
个人简介

一名刚毕业的大学生,一名oracle爱好者,一名unix爱好者,一名技术爱好者!

文章分类

全部博文(13)

文章存档

2013年(13)

我的朋友

分类: Oracle

2013-06-16 11:33:29

论坛上看到关于insert的帖子不错,整理一下,分享一下

点击(此处)折叠或打开

  1. 点击(此处)折叠或打开

  2.     一、Insert基础用法
  3.     语法:
  4.         Insert Into 表名 (字段1,字段2,字段3...
  5.         Values (值1,值2,值3...
  6.     例子:
  7.     INSERT INTO departments(department_id, department_name,
  8.     manager_id, location_id)
  9.     VALUES (70, 'Public Relations', 100, 1700);
  10.     语法:
  11.         Insert Into 表名 (字段1,字段2,字段3...
  12.         select 语句
  13.     不做任何解释,实在是没啥好说的?_?,注意别跟create table ...as select一样,insert中的select前面可没as ^_^
  14.     二、Unconditional INSERT ALL 用法
  15.     直接拿例子了:
  16.     INSERT ALL
  17.        INTO sal_history VALUES(EMPID,HIREDATE,SAL)
  18.        INTO mgr_history VALUES(EMPID,MGR,SAL)
  19.        SELECT employee_id EMPID, hire_date HIREDATE,
  20.                       salary SAL, manager_id MGR
  21.        FROM employees
  22.        WHERE employee_id > 200;
  23.     解释:将select查询出来的结果,每返回一行就分别插入表sal_history 和mgr_history 中,优点就是只做一次查询即可分别查询2个表,假如使用基础用法,将进行2次查询。
  24.     三、Conditional INSERT ALL
  25.     还是直接拿例子:
  26.     INSERT ALL
  27.         WHEN SAL > 10000 THEN
  28.             INTO sal_history VALUES(EMPID,HIREDATE,SAL)
  29.        WHEN MGR > 200 THEN
  30.            INTO mgr_history VALUES(EMPID,MGR,SAL)
  31.        SELECT employee_id EMPID,hire_date HIREDATE,
  32.                       salary SAL, manager_id MGR
  33.        FROM employees
  34.        WHERE employee_id > 200;
  35.     解释:将select查询出来的结果,每返回一行就判断,SAL > 10000 就插入表sal_history ,MGR > 200就插入mgr_history ,优点和前面提到一样。
  36.     四、Conditional FIRST INSERT
  37.     仍然是例子:
  38.     INSERT FIRST
  39.        WHEN SAL > 25000 THEN
  40.            INTO special_sal VALUES(DEPTID, SAL)
  41.        WHEN HIREDATE like ('%') THEN
  42.           INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
  43.        WHEN HIREDATE like ('?%') THEN
  44.           INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
  45.        ELSE
  46.           INTO hiredate_history VALUES(DEPTID, HIREDATE)
  47.        SELECT department_id DEPTID, SUM(salary) SAL,
  48.                       MAX(hire_date) HIREDATE
  49.        FROM employees
  50.        GROUP BY department_id;
  51.     解释:将select查询出来的结果,每返回一行就判断,SAL > 25000就插入表special_sal ,否则HIREDATE like ('%') ,符合就插入hiredate_history_00,前面2个条件还是不成力,就判断HIREDATE like ('?%') ,符合就插入表hiredate_history_99 ,前面3个条件都不符合,只好插入表hiredate_history 了。
  52.     打完这我都头晕了,假如学过程序设计,看下面的清晰明了:
  53.     if SAL > 25000 then
  54.         INTO special_sal VALUES(DEPTID, SAL)
  55.     else
  56.     (
  57.         if HIREDATE like ('%') THEN
  58.              INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
  59.         else
  60.             (
  61.                 if HIREDATE like ('?%') THEN
  62.                     INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
  63.                 else
  64.                     INTO hiredate_history VALUES(DEPTID, HIREDATE)
  65.             )
  66.     )
  67.     假如还看不理解,看官方的这句话吧,“If the first WHEN clause evaluates to true, the subsequent WHEN clauses for this row should be skipped.
  68.     五、Pivoting INSERT
  69.     最后还是例子:
  70.     INSERT ALL
  71.        INTO sales_info VALUES (employee_id,week_id,sales_MON)
  72.        INTO sales_info VALUES (employee_id,week_id,sales_TUE)
  73.        INTO sales_info VALUES (employee_id,week_id,sales_WED)
  74.        INTO sales_info VALUES (employee_id,week_id,sales_THUR)
  75.        INTO sales_info VALUES (employee_id,week_id, sales_FRI)
  76.     SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
  77.                   sales_WED, sales_THUR,sales_FRI
  78.     FROM sales_source_data;
  79.     解释:老实说,看不出有啥用法,真的非要说,咱就把它当作行列转换吧,如果上面表在加多一列,比如INTO sales_info VALUES (employee_id,week_id,week_which,sales_MON) 改成 INTO sales_info VALUES (employee_id,week_id,'星期一',sales_MON)


阅读(294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~