zoukankan      html  css  js  c++  java
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

    转自:http://blog.csdn.net/tianlesoftware/article/details/4961667

    我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO  INSERT INTO SELECT 表复制语句了。

     

    1.INSERT INTO SELECT语句

          语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

          注意:(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在

                  2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1 field2...中必须包括主键

                  3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:

                         Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)

          由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

    + expand sourceview plaincopy to clipboardprint


    --1.
    创建测试表   
        create TABLE Table1   
        (   
            a varchar(10),   
            b varchar(10),   
            c varchar(10)
        ) 
        create TABLE Table2   
        (   
            a varchar(10),   
            c varchar(10),   
            d int
        ) 

        --2.
    创建测试数据   
        Insert into Table1 values('
    ','asds','90')   
        Insert into Table1 values('
    ','asds','100')   
        Insert into Table1 values('
    ','asds','80')   
        Insert into Table1 values('
    ','asds',null)   

        select * from Table2  


        --3.INSERT INTO SELECT
    语句复制表数据   
        Insert into Table2(a, c, d) select a,c,5 from Table1   


        --4.
    显示更新后的结果   
        select * from Table2   

        --5.
    删除测试表   
        drop TABLE Table1   
        drop TABLE Table2 



    2.SELECT INTO FROM语句

          语句形式为:SELECT vale1, value2 into Table2 from Table1

          要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2 。示例如下:

    view plaincopy to clipboardprint?
    --1.
    创建测试表   

        create TABLE Table1   
        (   
            a varchar(10),   
            b varchar(10),   
            c varchar(10)
        ) 

        --2.
    创建测试数据   
        Insert into Table1 values('
    ','asds','90')   
        Insert into Table1 values('
    ','asds','100')   
        Insert into Table1 values('
    ','asds','80')   
        Insert into Table1 values('
    ','asds',null)   

        --3.SELECT INTO FROM
    语句创建表Table2并复制数据   

        select a,c INTO Table2 from Table1   
     
        --4.
    显示更新后的结果   
        select * from Table2   

        --5.
    删除测试表   
        drop TABLE Table1   
        drop TABLE Table2  

    注意:如果在sql/plus或者PL/SQL执行这条语句,会报"ORA-00905:缺失关键字"错误,原因是PL/SqlT-SQL的区别。
    T-SQL中该句正常,但PL/SQL中解释是:
    select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
    即不能单独作为一条sql语句执行,一般在PL/SQL程序块(block)中使用。

     

    如果想在PL/SQL中实现该功能,可使用Create table newTable as select * from ...
    如: create table NewTable as select * from ATable;

     

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/zerocc/p/2114418.html
Copyright © 2011-2022 走看看