SQL INSERT INTO…SELECT语句

SQL INSERT INTO…SELECT语句

INSERT INTO…SELECT语句

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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程