SELECT INTO 和 INSERT INTO SELECT 兩種表復(fù)制語句詳解(SQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫的區(qū)別)

http://www.cnblogs.com/mq0036/p/4155136.html


我們經(jīng)常會遇到需要表復(fù)制的情況,如將一個table1的數(shù)據(jù)的部分字段復(fù)制到table2中,或者將整個table1復(fù)制到table2中沉唠,這時候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復(fù)制語句了仲锄。


1.INSERT INTO SELECT語句


語句形式為: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)注意語法惑申,不要加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)建測試表 ?

? ?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)建測試數(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語句復(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.刪除測試表 ?

? ?drop TABLE Table1 ?

? ?drop TABLE Table2





2.SELECT INTO FROM語句


語句形式為:SELECT vale1, value2 into Table2 from Table1


要求目標(biāo)表Table2不存在绩脆,因為在插入時會自動創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中橄抹。示例如下:


view plaincopy to clipboardprint?

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

? ?create TABLE Table1 ?

? ?( ?

? ? ? ?a varchar(10), ?

? ? ? ?b varchar(10), ?

? ? ? ?c varchar(10)

? ?)


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

? ?select a,c INTO Table2 from Table1 ?

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

? ?select * from Table2 ?


? ?--5.刪除測試表 ?

? ?drop TABLE Table1 ?

? ?drop TABLE Table2



注意:如果在sql/plus或者PL/SQL執(zhí)行這條語句靴迫,會報"ORA-00905:缺失關(guān)鍵字"錯誤,原因是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.

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



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

如: create table NewTable as select * from ATable;


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



---------SQL SELECT INTO語法介紹

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

SELECT INTO 語句

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

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

SQL SELECT INTO 語法

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

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 實例 - 制作備份復(fù)件

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

SELECT * INTO Persons_backup FROM Persons

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

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

如果我們希望拷貝某些域涎才,可以在 SELECT 語句后列出這些域:

SELECT LastName,FirstName

INTO Persons_backup

FROM Persons

SQL SELECT INTO 實例 - 帶有 WHERE 子句

我們也可以添加 WHERE 子句。

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

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

SQL SELECT INTO 實例 - 被連接的表

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

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

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)容合作請聯(lián)系作者
  • 序言:七十年代末畏邢,一起剝皮案震驚了整個濱河市业扒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舒萎,老刑警劉巖程储,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹭沛,死亡現(xiàn)場離奇詭異,居然都是意外死亡章鲤,警方通過查閱死者的電腦和手機(jī)摊灭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來败徊,“玉大人帚呼,你說我怎么就攤上這事≈灞模” “怎么了煤杀?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪哺。 經(jīng)常有香客問我沈自,道長,這世上最難降的妖魔是什么辜妓? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任枯途,我火速辦了婚禮,結(jié)果婚禮上籍滴,老公的妹妹穿的比我還像新娘酪夷。我一直安慰自己,他們只是感情好孽惰,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布晚岭。 她就那樣靜靜地躺著,像睡著了一般灰瞻。 火紅的嫁衣襯著肌膚如雪腥例。 梳的紋絲不亂的頭發(fā)上辅甥,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天酝润,我揣著相機(jī)與錄音,去河邊找鬼璃弄。 笑死要销,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夏块。 我是一名探鬼主播疏咐,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脐供!你這毒婦竟也來了浑塞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤政己,失蹤者是張志新(化名)和其女友劉穎酌壕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡卵牍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年果港,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊昙。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡辛掠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出释牺,到底是詐尸還是另有隱情萝衩,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布没咙,位于F島的核電站欠气,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镜撩。R本人自食惡果不足惜预柒,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袁梗。 院中可真熱鬧宜鸯,春花似錦、人聲如沸遮怜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锯梁。三九已至即碗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陌凳,已是汗流浹背剥懒。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留合敦,地道東北人初橘。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像充岛,于是被迫代替她去往敵國和親保檐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容