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
广告