首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL INSERT INTO SELECT 語句:跨表複製資料的完整指南

     編輯:SQL 基礎

SQL INSERT INTO SELECT 跨表複製資料


INSERT INTO SELECT 可從來源表查詢資料,直接插入到「已存在」的目標表中。來源表與目標表結構可以不同,只需欄位數量、順序、類型相容即可。目標表原有資料不受影響。


語法結構

複製所有欄位

INSERT INTO table2
SELECT * FROM table1;

複製指定欄位(推薦寫法)

INSERT INTO table2 (column_name(s))
SELECT column_name(s)
FROM table1;

關鍵點:明確列出欄位名稱可避免結構變更導致的錯誤,也能處理欄位順序不同的情況。


演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow| https://stackoverflow.com/ | 0     | IND     |
+----+--------------+---------------------------+-------+---------+

apps 表

+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
| 1  | QQ APP     | https://im.qq.com/       | CN      |
| 2  | 微博 APP   | https://weibo.com/       | CN      |
| 3  | 淘寶 APP   | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+

實戰範例

範例 1:將 apps 全部資料複製到 Websites

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;

說明:目標表 Websites 只有 name、country 兩欄位接收資料,id、url、alexa 將依預設值或自動遞增填入。

範例 2:僅複製 QQ APP(id=1)

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id = 1;

進階應用技巧

  • 搭配轉換函數:SELECT UPPER(app_name), country ... 可在複製時轉換格式。
  • 避免重複:搭配 WHERE NOT EXISTS (SELECT 1 FROM Websites w WHERE w.name = a.app_name) 過濾已存在資料。
  • 大量資料效能:大批次複製時建議分批次提交、暫時關閉索引/觸發器、使用批次大小參數。

與 SELECT INTO 的差異

特性INSERT INTO SELECTSELECT INTO
目標表必須預先存在自動建立新表
保留索引/約束是否(僅複製結構與資料)
適用場景資料遷移、ETL、備份同步快速建立備份表、臨時表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved