Sql 简明教程

SQL - Insert Into…​ Select Statement

The Insert Into…​ Select Statement

SQL INSERT INTO…​ SELECT 语句用于将现有表中的一个或多个新行添加/插入到另一个表。此语句是两个不同语句的组合:INSERT INTO 和 SELECT。

  1. INSERT INTO 语句是数据库管理中最基本和最常用的语句之一,只需要表名和要插入的值。但是,重要的是确保要插入的数据满足列的约束(如果有)并且其类型与表列的数据类型匹配。

  2. SELECT 语句用于从现有数据库表中检索数据。

当这些语句一起使用时,SELECT 语句首先从现有表中检索数据,INSERT INTO 语句将检索到的数据插入到另一个表中(如果它们具有相同的表结构)。

Syntax

以下是 SQL INSERT INTO…​ SELECT 语句的语法 −

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

在使用此查询之前,我们必须确保:

  1. 在我们准备插入数据的数据库中,源表和目标表已经存在。

  2. 源表和目标表的结构相同。

Example

假设我们已经创建了一个名为 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

使用与 CUSTOMERS 表相同的结构创建另一个名为 BUYERS 的表。

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;

Verification

如果您使用 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 - Inserting Specific Records

有时我们只需要向另一个表中添加少量记录。这可以通过将 WHERE 子句与 SQL INSERT INTO…​ SELECT 语句一起使用来完成。

Example

让我们使用 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%';

Verification

以下是用于验证以上创建的表内容的 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 - Inserting Top N Rows

LIMIT 子句过滤查询中的行数。您可以使用它来过滤应该添加到目标表中的前 N 条记录。

Example

但是,在继续之前,让我们使用以下语句截断 BUYERS 表中的所有行:

TRUNCATE TABLE BUYERS;

以下查询将 CUSTOMERS 表中的前 3 条记录插入到 BUYERS 表中 −

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

Verification

让我们验证 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