2018-11-19

語(yǔ)句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

或者:Insert into Table2 select ?* ?from Table1

注意:(1)要求目標(biāo)表Table2必須存在,并且字段field,field2...也必須存在

(2)注意Table2的主鍵約束,如果Table2有主鍵而且不為空,則 field1, field2...中必須包括主鍵

(3)注意語(yǔ)法,不要加values,和插入一條數(shù)據(jù)的sql混了,不要寫成:

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

由于目標(biāo)表Table2已經(jīng)存在,所以我們除了插入源表Table1的字段外,還可以插入常量。示例如下:

+ expand sourceview plaincopy to clipboardprint

--1.創(chuàng)建測(cè)試表

create TABLE Table1

(

a varchar(10),

b varchar(10),

c varchar(10)

)

create TABLE Table2

(

a varchar(10),

c varchar(10),

d int

)

?--2.創(chuàng)建測(cè)試數(shù)據(jù)

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語(yǔ)句復(fù)制表數(shù)據(jù)部分列和常值

Insert into Table2(a, c, d) select a,c,5 from Table1

或:Insert into Table2 select * from Table1

--4.顯示更新后的結(jié)果

select * from Table2

?--5.刪除測(cè)試表

drop TABLE Table1

drop TABLE Table2

2.SELECT INTO FROM語(yǔ)句

語(yǔ)句形式為:SELECT vale1, value2 into Table2 from Table1

要求目標(biāo)表Table2不存在,因?yàn)樵诓迦霑r(shí)會(huì)自動(dòng)創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。示例如下:

view plaincopy to clipboardprint?

?--1.創(chuàng)建測(cè)試表

create TABLE Table1

(

a varchar(10),

b varchar(10),

c varchar(10)

)

?--2.創(chuàng)建測(cè)試數(shù)據(jù)

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語(yǔ)句創(chuàng)建表Table2并復(fù)制數(shù)據(jù)

select a,c INTO Table2 from Table1

?--4.顯示更新后的結(jié)果

select * from Table2

?--5.刪除測(cè)試表

drop TABLE Table1

drop TABLE Table2

注意:如果在sql/plus或者PL/SQL執(zhí)行這條語(yǔ)句,會(huì)報(bào)"ORA-00905:缺失關(guān)鍵字"錯(cuò)誤,原因是PL/Sql與T-SQL的區(qū)別。

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.

即不能單獨(dú)作為一條sql語(yǔ)句執(zhí)行,一般在PL/SQL程序塊(block)中使用。


如果想在PL/SQL中實(shí)現(xiàn)該功能,可使用Create table newTable as select * from ...:

如:?create table NewTable as select * from ATable;

NewTable 除了沒有鍵,其他的和ATable一樣


---------SQL SELECT INTO語(yǔ)法介紹

SQL SELECT INTO 語(yǔ)句可用于創(chuàng)建表的備份復(fù)件。

SELECT INTO 語(yǔ)句

SELECT INTO 語(yǔ)句從一個(gè)表中選取數(shù)據(jù),然后把數(shù)據(jù)插入另一個(gè)表中。

SELECT INTO 語(yǔ)句常用于創(chuàng)建表的備份復(fù)件或者用于對(duì)記錄進(jìn)行存檔。

SQL SELECT INTO 語(yǔ)法

您可以把所有的列插入新表:

SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

或者只把希望的列插入新表:

SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

SQL SELECT INTO 實(shí)例 - 制作備份復(fù)件

下面的例子會(huì)制作 "Persons" 表的備份復(fù)件:

SELECT * INTO Persons_backup FROM Persons

IN 子句可用于向另一個(gè)數(shù)據(jù)庫(kù)中拷貝表:

SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

如果我們希望拷貝某些域,可以在 SELECT 語(yǔ)句后列出這些域:

SELECT LastName,FirstName

INTO Persons_backup

FROM Persons

SQL SELECT INTO 實(shí)例 - 帶有 WHERE 子句

我們也可以添加 WHERE 子句。

下面的例子通過從 "Persons" 表中提取居住在 "Beijing" 的人的信息,創(chuàng)建了一個(gè)帶有兩個(gè)列的名為 "Persons_backup" 的表:

SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'

SQL SELECT INTO 實(shí)例 - 被連接的表

從一個(gè)以上的表中選取數(shù)據(jù)也是可以做到的。

下面的例子會(huì)創(chuàng)建一個(gè)名為 "Persons_Order_Backup" 的新表,其中包含了從 Persons 和 Orders 兩個(gè)表中取得的信息:

SELECT Persons.LastName,Orders.OrderNo

INTO Persons_Order_Backup

FROM Persons

INNER JOIN Orders

ON Persons.Id_P=Orders.Id_P

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容