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

    我们经常会遇到需要表复制的情况,如将一个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;

     

     

    道森Oracle,国内最早、最大的网络语音培训机构,我们提供专业、优质的Oracle技术培训和服务! 我们的官方网站:http://www.daosenoracle.com 官方淘宝店:http://daosenpx.taobao.com/
  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3610325.html
Copyright © 2011-2022 走看看