SQL - 插入資料到…選擇語句



插入資料到…選擇語句

SQL 的INSERT INTO... SELECT語句用於從現有表中新增/插入一行或多行到另一個表。此語句是兩個不同語句的組合:INSERT INTO 和 SELECT。

  • INSERT INTO 語句是資料庫管理中最基本和最常用的語句之一,只需要表名和要插入的值。但是,務必確保插入的資料滿足表列(如果有)的約束條件,並且其型別與表列的資料型別匹配。

  • SELECT 語句用於從現有的資料庫表中檢索資料。

當這兩個語句一起使用時,SELECT 語句首先從現有表中檢索資料,然後 INSERT INTO 語句將檢索到的資料插入到另一個表中(如果它們具有相同的表結構)。

語法

以下是 SQL INSERT INTO... SELECT 語句的語法:

INSERT INTO table_new 
SELECT (column1, column2, ...columnN) 
FROM table_old;

在使用此查詢之前,我們必須確保:

  • 在我們即將插入資料的資料庫中,源表和目標表已經存在。

  • 源表和目標表的結構相同。

示例

假設我們建立了一個名為CUSTOMERS的表,其中包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和工資等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

現在,使用 INSERT 語句將值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

表將建立為:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

建立另一個名為BUYERS的表,其結構與 CUSTOMERS 表相同。

CREATE TABLE BUYERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查詢將CUSTOMERS表中的所有記錄複製到BUYERS

INSERT INTO BUYERS SELECT * FROM CUSTOMERS;

驗證

如果您使用 SELECT 語句驗證 BUYERS 表的內容,如下所示:

SELECT * FROM BUYERS;

表將建立為:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

SQL - 插入特定記錄

有時我們只需要將少量記錄新增到另一個表中。這可以透過使用 WHERE 子句以及 SQL INSERT INTO... SELECT 語句來實現。

示例

讓我們使用 CREATE 語句建立一個名為NAMESTARTSWITH_K的表,其結構與 CUSTOMER 表相同,如下所示:

CREATE TABLE NAMESTARTSWITH_K (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查詢將姓名以字母k開頭的客戶的記錄從 CUSTOMERS 表插入到 BUYERS 表:

INSERT INTO NAMESTARTSWITH_K
SELECT * FROM CUSTOMERS
WHERE NAME LIKE 'k%';

驗證

以下是用於驗證上面建立的表內容的 SELECT 語句:

SELECT * FROM NAMESTARTSWITH_K;

表將建立為:

ID 姓名 年齡 地址 工資
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
6 Komal 22 Hyderabad 4500.00

SQL - 插入前 N 行

LIMIT 子句過濾查詢中的行數。您可以使用它來過濾應新增到目標表的前 N 條記錄。

示例

但是,在繼續之前,讓我們使用以下語句清空 BUYERS 表中的所有行:

TRUNCATE TABLE BUYERS;

以下查詢將 CUSTOMERS 表中的前 3 條記錄插入到 BUYERS 表:

INSERT INTO BUYERS 
SELECT * FROM CUSTOMERS 
ORDER BY ID ASC LIMIT 3;

驗證

讓我們驗證 BUYERS 表的內容:

SELECT * FROM BUYERS;

結果表將如下所示:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
廣告