Mysql 简明教程
MySQL - Insert Into Select
The MySQL Insert Into Select Statement
在 MySQL 中, INSERT INTO… SELECT 语句用于将现有表中的一行或多行添加到/插入到目标表。
此语句结合了两个不同的语句:INSERT INTO 和 SELECT。
-
MySQL INSERT INTO 语句是数据库管理中常用的命令,它只需要表名和要插入到表中的值。但是,重要的是要确保要插入的数据与表列的结构和数据类型相匹配。
-
SELECT 语句用于从现有数据库表中获取数据。
当一起使用上述语句时,SELECT 语句首先从现有表中获取数据, INSERT INTO 语句将检索到的数据插入到另一张表(如果它们具有相同的表结构)。
Syntax
以下是使用插入到 select 语句的语法 −
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
在我们执行以下查询之前,需要考虑以下一些重要事项 −
-
在我们要插入数据的数据库中,必须已经存在一个表。
-
源表和目标表都必须匹配其结构。
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)
);
以下查询在上述创建的表中插入 7 条记录 −
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 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 );
执行以下查询以从 CUSTOMERS 表中检索所有记录 −
Select * From CUSTOMERS;
以下为 CUSTOMERS 表 −
Inserting Required Data from one Table to Another Table
我们可能会遇到某些实例,我们只想向另一张表添加少量记录。这可以通过使用 WHERE 子句来实现,该子句选择查询返回的所有行数。
Example
在此之前,让我们创建一个名为 CUSTOMERS_copy 的另一个表,其结构与先前创建的 CUSTOMERS 表类似 −
CREATE TABLE CUSTOMERS_copy (
ID INT AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
在以下查询中,我们尝试从 CUSTOMERS 表中获取记录并将它们插入到 CUSTOMERS_copy 表中。
INSERT INTO CUSTOMERS_copy (ID, NAME, AGE, ADDRESS, SALARY)
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS
WHERE AGE >= 25;
Inserting the rows with LIMIT
通过使用 MySQL LIMIT 子句,我们可以指定从查询中添加到目标表的行数。
Inserting All Columns from one Table to Another Table
我们还可以将从一个表中的每一列插入到另一个表中。若要执行此操作,以下为语法 −
INSERT INTO table2
SELECT * FROM table1
在插入所有记录之前,首先使用该语句截断 CUSTOMERS_copy 表中的所有行 −
TRUNCATE TABLE CUSTOMERS_copy;
在以下查询中,我们尝试将 CUSTOMERS 表中的所有列添加到 CUSTOMERS_copy 表中 −
INSERT INTO CUSTOMERS_copy SELECT * FROM CUSTOMERS;