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

SQL SELECT INTO 語句:建立新表並複製資料的完整教學

     編輯:SQL 基礎

SQL SELECT INTO 建立新表並複製資料


SELECT INTO 從來源表查詢資料,並「自動建立新表」存放結果。這在建立備份表、臨時分析表、資料快照時非常方便。注意:MySQL 不支援標準 SELECT INTO,需改用 CREATE TABLE ... SELECT。


標準語法(SQL Server、PostgreSQL、Oracle 等)

複製所有欄位

SELECT *
INTO newtable [IN externaldb]
FROM table1;

複製指定欄位

SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
  • newtable:自動建立的新表名稱。
  • IN externaldb:選項,指定建立在其他資料庫(SQL Server 支援)。
  • 新表的欄位名稱、類型由 SELECT 清單決定,可用 AS 別名重新命名。

MySQL 替代寫法

MySQL 不支援 SELECT INTO,請使用:

CREATE TABLE new_table AS
SELECT * FROM old_table;

或僅複製結構不複製資料:

CREATE TABLE new_table AS
SELECT * FROM old_table WHERE 1=0;

實戰範例(以標準語法示範)

範例 1:建立 Websites 完整備份表

SELECT *
INTO WebsitesBackup2016
FROM Websites;

範例 2:僅備份 name、url 兩欄位

SELECT name, url
INTO WebsitesBackup2016
FROM Websites;

範例 3:條件篩選 - 僅中國網站

SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country = 'CN';

範例 4:多表聯結建立彙總表

SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log ON Websites.id = access_log.site_id;

範例 5:僅複製結構建立空表

SELECT *
INTO newtable
FROM table1
WHERE 1=0;

重要限制與注意事項

  • 不複製索引、主鍵、約束、觸發器:新表僅擁有欄位定義與資料,需事後手動加上約束。
  • 身分識別欄位:若來源表有 IDENTITY 或 AUTO_INCREMENT,新表可能不保留自動遞增屬性(視資料庫而定)。
  • 權限:執行者需具備建立表權限。
  • 大量資料:大表操作會產生大量交易記錄,建議分批或使用大量載入工具。

圖示說明

提示:新表將使用 SELECT 定義的欄位名稱與類型建立,善用 AS 可讓欄位名稱更具語意。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved