Oracle INSERT 语句

来源:互联网 发布:淘宝返红包怎么用 编辑:程序博客网 时间:2024/06/05 00:24

Oracle INSERT 语句

http://blog.csdn.net/shangboerds/article/details/46538655

方法1

我估计有点 SQL 基础的人都会写 INSERT 语句。下面是 SQL 标准写法。

[sql] view plain copy print?
  1. INSERT INTO employees (employee_id, nameVALUES (1, 'Zhangsan');  
  2. INSERT INTO employees VALUES (1, 'Shangbo');  

方法2

其实,Oracle 还支持下面的写法,作用和上面的语句完全相同。

[sql] view plain copy print?
  1. INSERT INTO (SELECT employee_id, name FROM employees) VALUES (2, 'Lisi');  

方法3

此外,同其他数据库一样,Oracle 也支持下面这种写法。

[sql] view plain copy print?
  1. INSERT INTO employees  
  2. SELECT 3, 'Wangwu' FROM DUAL;  

方法4

下面这种写法可以实现列转行,如我们有下面的表存储原始数据,原始数据可能从文件中来。

[sql] view plain copy print?
  1. create table sales_input_table (  
  2. prod_id        number(9,0),  
  3. amt_mon        number(9,6),  
  4. amt_tue        number(9,6),  
  5. amt_wed        number(9,6),  
  6. amt_thu        number(9,6),  
  7. amt_fri        number(9,6)  
  8. );  
  9. insert into sales_input_table values (1, 100.0, 200.0, 300.0, 400.0, 500.0);  

下面我们通过一个 SQL 把上面的数据插入到下面的表中实现列转行。

[sql] view plain copy print?
  1. CREATE TABLE sales (  
  2. prod_id        number(9,0),  
  3. time_id        date,  
  4. amount         number(9,0)  
  5. );  
  6.   
  7. INSERT ALL  
  8. INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE, amt_mon)  
  9. INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 1, amt_tue)  
  10. INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 2, amt_wed)  
  11. INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 3, amt_thu)  
  12. INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 4, amt_fri)  
  13. SELECT prod_id, amt_mon, amt_tue, amt_wed, amt_thu, amt_fri FROM sales_input_table;  

方法5

下面这种写法可以帮我们一次性把一个表中的数据倒入到多个表中,否则我们必须写多条 SQL 实现同样的功能。

[sql] view plain copy print?
  1. INSERT ALL  
  2. WHEN order_total <= 100000 THEN  
  3. INTO small_orders  
  4. WHEN order_total > 100000 AND order_total <= 200000 THEN  
  5. INTO medium_orders  
  6. WHEN order_total = 500000 THEN  
  7. INTO special_orders  
  8. WHEN order_total > 200000 THEN  
  9. INTO large_orders  
  10. ELSE  
  11. INTO large_orders  
  12. SELECT order_id, order_total, sales_rep_id, customer_id FROM orders;  

注意,当 order_total 大于 200000 时,orders 会被插入到 large_orders 和 special_orders 中。这可能不是你想要的结果,如果你只想让 orders 插入到 special_orders 表中,你只需要把 ALL 替换成 FIRST, 如下。

[sql] view plain copy print?
  1. INSERT FIRST  
  2. WHEN order_total <= 100000 THEN  
  3. INTO small_orders  
  4. WHEN order_total > 100000 AND order_total <= 200000 THEN  
  5. INTO medium_orders  
  6. WHEN order_total = 500000 THEN  
  7. INTO special_orders  
  8. WHEN order_total > 200000 THEN  
  9. INTO large_orders  
  10. ELSE  
  11. INTO large_orders  
  12. SELECT order_id, order_total, sales_rep_id, customer_id FROM orders;  

--更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-06-18

-- Created by ShangBo on 2015-06-17

-- End



 
 
0 0