Sql 简明教程
SQL - Insert Into… Select Statement
The Insert Into… Select Statement
SQL INSERT INTO… SELECT 语句用于将现有表中的一个或多个新行添加/插入到另一个表。此语句是两个不同语句的组合:INSERT INTO 和 SELECT。
-
INSERT INTO 语句是数据库管理中最基本和最常用的语句之一,只需要表名和要插入的值。但是,重要的是确保要插入的数据满足列的约束(如果有)并且其类型与表列的数据类型匹配。
-
SELECT 语句用于从现有数据库表中检索数据。
当这些语句一起使用时,SELECT 语句首先从现有表中检索数据,INSERT INTO 语句将检索到的数据插入到另一个表中(如果它们具有相同的表结构)。
Syntax
以下是 SQL INSERT INTO… SELECT 语句的语法 −
INSERT INTO table_new
SELECT (column1, column2, ...columnN)
FROM table_old;
在使用此查询之前,我们必须确保:
-
在我们准备插入数据的数据库中,源表和目标表已经存在。
-
源表和目标表的结构相同。
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;
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%';