SQL - INSERT 查詢



SQL INSERT INTO 語句

SQL 的INSERT INTO 語句用於向資料庫中的表新增新的資料行。幾乎所有 RDBMS 都提供此 SQL 查詢以將記錄新增到資料庫表中。

我們使用此語句插入到表中的每條記錄中的每個值都應該與相應的列的資料型別相同,並且應滿足列的約束(如果有)。使用 insert 語句傳遞的值應與表中的列數匹配,或者與當前查詢中提到的列數匹配。如果任何這些條件不滿足,則此語句會生成錯誤。

語法

SQL 的INSERT INTO語句有兩個基本語法,如下所示:

INSERT INTO TABLE_NAME (column1, column2...columnN) 
VALUES (value1, value2...valueN);

這裡,column1、column2、column3…columnN 是您要向其中插入資料的表中的列名。

INSERT INTO 語句還有另一種語法,您可以在其中僅指定列值而不指定列名。但是,請確保值的順序與表中列的順序相同。

以下是 SQL INSERT 查詢的第二種語法:

INSERT INTO TABLE_NAME 
VALUES (value1,value2...valueN);

示例

要檢視示例,讓我們使用 CREATE TABLE 語句在 MySQL 資料庫中建立一個名為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)
);

以下 SQL INSERT INTO 語句將在空的 CUSTOMERS 表中建立三條記錄。

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Kaushik', 23, 'Kota', 2000.00 );

我們還可以使用以下查詢一次插入多行,如下所示:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 );

以下查詢使用第二種語法在 CUSTOMERS 表中新增另一條記錄,如下所示:

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

驗證

要檢查記錄是否已插入到 CUSTOMERS 表中,請使用 SELECT 查詢:

SELECT * FROM CUSTOMERS;

表將顯示其中包含的所有記錄。

ID 姓名 年齡 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

使用另一個表將資料插入表中

有時,您只需要將資料從現有表複製到同一資料庫中的另一個表。SQL 提供了方便的方法來做到這一點:

  • 使用 INSERT... SELECT
  • 使用 INSERT... TABLE

INSERT... SELECT 語句

您可以使用已經存在的另一個表透過 select 語句將資料填充到表中;前提是另一個表具有一組欄位,這些欄位是填充第一個表所需的。

以下是語法:

INSERT INTO first_table_name [(column_name(s))]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];

示例

以下語句將建立另一個名為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)
);

現在,使用 INSERT... INTO 語句,讓我們將所有記錄從CUSTOMERS表插入到BUYERS表。

INSERT INTO BUYERS (ID, NAME, AGE, ADDRESS, SALARY) 
SELECT * FROM CUSTOMERS;

輸出

輸出將顯示為:

Query OK, 7 rows affected (0.07 sec)
Records: 7  Duplicates: 0  Warnings: 0

驗證

要驗證記錄是否正確插入,請使用以下 SELECT 查詢:

SELECT * FROM BUYERS;

該表將顯示與 CUSTOMERS 相同的記錄:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

INSERT... TABLE 語句

如果您的兩個表結構完全相同,則無需選擇特定列,您可以使用INSERT...TABLE語句將一個表的內容插入到另一個表中。

以下是執行此操作的語法:

INSERT INTO first_table_name TABLE second_table_name;

示例

在此示例中,讓我們使用我們在前面示例中建立的相同的 CUSTOMERS 表,並將它的內容複製到另一個名為 SHOPPERS 的表中。為此,讓我們建立與 CUSTOMERS 表結構相同的 SHOPPERS 表:

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

現在使用以下語句將CUSTOMERS表中的所有記錄插入到SHOPPERS表中:

INSERT INTO SHOPPERS TABLE CUSTOMERS;

輸出

此查詢將生成以下輸出:

Query OK, 7 rows affected (0.13 sec)
Records: 7  Duplicates: 0  Warnings: 0

驗證

如果您使用以下顯示的 SELECT 語句驗證 SHOPPERS 表的內容:

SELECT * FROM SHOPPERS;

該表將顯示新插入的值:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

僅將資料插入指定列

您可以選擇表中的特定列以插入到另一個表中。以下 SQL 語句將使用 CUSTOMERS 表中的“ID”、“姓名”和“年齡”向 BUYERS 表中插入一條新記錄。

我們可以跳過未定義為 NOT NULL 的欄位,但是如果我們將列定義為 NOT NULL,則需要為此列提供值,否則它將引發錯誤,並且不會插入記錄。

在我們繼續之前,讓我們清除 BUYERS 表中的所有記錄,如下所示:

DELETE FROM BUYERS;

現在我們有空的 BUYERS 表,讓我們使用以下 SQL 語句:

INSERT INTO BUYERS (ID, NAME, AGE) 
SELECT ID, NAME, AGE FROM CUSTOMERS;

輸出

此查詢將生成以下輸出:

Query OK, 7 rows affected (0.13 sec)
Records: 7  Duplicates: 0  Warnings: 0

驗證

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

SELECT * FROM BUYERS;

該表將顯示新插入的值:

ID 姓名 年齡 地址 薪水
1 Ramesh 32
2 Ahmedabad 25
3 Khilan 23
4 Delhi 25
5 Kaushik 27
6 Kota 22
7 Chaitali 24
廣告