zoukankan      html  css  js  c++  java
  • 多表insert操作详解

    --1.无条件的多表insert all
    create table emp_1 as select id,last_name from s_emp where 1=0;
    create table emp_2 as select * from s_emp where 1=0;
    create table emp_3 as select * from s_emp where 1=0;
    --没有条件,向多个目标表全量插入,必须有all
    insert all
    --不指定emp_1后面的列,也不指定values,那么emp_1中的所有列类型和顺序与查询的列的类型和顺序一致
    --也就是emp_1中只有查询结果中的那几列,而且类型和顺序与其一致
    into emp_1
    --指定了emp_2后面的列,没有values,表示emp_2中要插入的列被选择出来,与查询的结果列类型和顺序一致
    --emp_2中也可能有很多列,不止这两列
    into emp_2(id,last_name)
    --指定emp_3后面的列,也指定values,那么values后面的列名必须与查询结果一致,如果
    --查询中有别名,必须在values中使用别名。emp_3中指定的列类型和顺序必须与values保持一致
    --emp_3中也可能列数大于指定的列数
    into emp_3(id,last_name) values(s_id,s_last_name)
    select id s_id,last_name s_last_name
      from s_emp;
    
    --2.带条件的多表insert all
    --conditional insert all:all可以省略,但不建议.
    insert all
    --将查询结果中为s_id>20的插入,条件中指定的列必须与查询的结果名字一致,如果有别名,用别名
    when s_id>20 then
    into emp_1
    --s_last_name为M开头的插入,可能插入的行与s_id>20有重复
    when s_last_name like 'M%'then
    into emp_2(id,last_name)
    --如果指定else,则不满足上面两个条件的插入到emp_3,插入的行不会与上面两个重复
    else
    into emp_3(id,last_name) values(s_id,s_last_name)
    select id s_id,last_name s_last_name
      from s_emp;
      
    --3.带条件的多表insert first
    --Insert first只有带条件的,没有不带条件的。
    --语法只要将insert all中的all改为first就可以了。这里的first不可以省略。省略那么默认就是all
    insert first
    --将查询结果中为s_id>20的插入,条件中指定的列必须与查询的结果名字一致,如果有别名,用别名
    when s_id>20 then
    into emp_1
    --s_last_name为M开头的插入,插入的行与s_id>20没有重复
    when s_last_name like 'M%'then
    into emp_2(id,last_name)
    --如果指定else,则不满足上面两个条件的插入到emp_3,插入的行不会与上面两个重复
    else
    into emp_3(id,last_name) values(s_id,s_last_name)
    select id s_id,last_name s_last_name
    from s_emp;
    
    --4.选择插入Pivoting insert
    --使用pivoting insert实现将非关系性表记录转换为关系型表中存储。Pivot旋转是OLAP中的一个基本改变,提供多维度数据分析。
    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;
    
    多表insert使用限制:
    1. 只能对table使用多表insert,不能对视图或物化视图使用。
    2. 不能对远程表进行这个插入操作。
    3. 在做多表insert操作,不能指定一个表的集合表达式。
    4. 多表insert中的的into目标表加在一起的列数不能超过999 个。
  • 相关阅读:
    hive函数之~字符串函数
    hive函数之~条件函数
    JSONP使用及注意事项小结
    css命名管理混乱?不妨试试BEM
    【移动端debug-6】如何做一个App里的web调试小工具
    ES6学习笔记(五):Class和Module
    ES6学习笔记(三):与迭代相关的新东东
    ES6学习笔记(四):异步操作
    ES6学习笔记(二):引用数据类型
    CORS跨域资源共享简述
  • 原文地址:https://www.cnblogs.com/huangbiquan/p/8001763.html
Copyright © 2011-2022 走看看