MySQL INSERT INTO SELECT语句
有时我们想要将一个表中的数据插入到另一个表中,这两个表可以在同一个数据库中也可以在不同的数据库中。使用INSERT查询手动输入这些数据并不容易。我们可以通过使用MySQL的INSERT INTO SELECT查询来优化这个过程。它允许我们快速填充MySQL表。本部分将介绍INSERT INTO SELECT命令、语法和使用情况。
在MySQL中,INSERT INTO SELECT语句允许我们将SELECT查询的数据插入到一个表中。换句话说,这个查询将数据从一个表复制到另一个表中。在使用这个语句之前,我们必须考虑以下几点:
- 源表和目标表的数据类型必须相同。
- 目标表中的现有记录不应受到影响。
当我们需要将数据从一个表复制到另一个表,或者将多个表的数据汇总到一个表中时,INSERT INTO SELECT命令是很有优势的。
语法
之前,我们使用INSERT命令将单个或多个记录添加到表中,并在VALUES子句中列出列值,如下所示:
INSERT INTO table_name (column_list)
VALUES (value_list);
以下是在MySQL中使用INSERT INTO SELECT命令的基本语法。如果我们想要将一个表中的所有数据复制到另一个表中,我们可以使用以下语句:
INSERT INTO table_name2
SELECT * FROM table_name1
WHERE condition;
从 MySQL版本8.0.19 开始,我们可以使用 TABLE 语句代替SELECT查询来获得相同的输出,如下所示:
INSERT INTO table2 TABLE table1;
在这里, table1 TABLE相当于 SELECT * FROM table1。当我们想要将源表中的所有记录添加到目标表中,而不过滤值时,它被使用。
如果我们只想从一个表复制一些列到另一个表中,我们可以使用以下语句:
INSERT INTO table_name2 (column_list)
SELECT column_list
FROM table_name1
WHERE condition;
在这个语法中,我们使用了SELECT语句,而不是使用VALUES子句。这里的SELECT命令从一个或多个表中检索值。
参数解释
INSERT INTO SELECT语句使用以下参数:
table_name1 :它是源表的名称。
table_name2 :它是目标表的名称,我们将在这个目标表中复制源表的数据。
column_list :它表示表的列名。
condition :它用于过滤表的数据。
MySQL INSERT INTO SELECT示例
让我们通过一个例子来了解MySQL中INSERT INTO SELECT语句的工作原理。首先,我们需要使用下面的语句创建一个名为” person “的表:
CREATE TABLE person (
id int AUTO_INCREMENT PRIMARY KEY,
name varchar(45) NOT NULL,
email varchar(45) NOT NULL,
city varchar(25) NOT NULL
);
接下来,我们将向表中插入值。我们可以执行以下语句将数据添加到表中:
INSERT INTO person (id, name, email, city)
VALUES (1,'Stephen', 'stephen@javatpoint.com', 'Texas'),
(2, 'Joseph', 'Joseph@javatpoint.com', 'Alaska'),
(3, 'Peter', 'Peter@javatpoint.com', 'Texas'),
(4,'Donald', 'donald@javatpoint.com', 'New York'),
(5, 'Kevin', 'kevin@javatpoint.com', 'Texas');
我们可以通过执行SELECT语句来验证数据:
SELECT * FROM person;
执行查询后,我们可以看到下面的输出,其中表中有五行:
假设我们想要将一个属于Texas City的人的姓名插入另一张表中。以下查询用于搜索所有位于Texas的人:
SELECT name, email, city
FROM person
WHERE city = 'Texas';
现在,我们将创建另一个名为 person_info 的表,该表具有与上表相同的列数和相同顺序的数据类型:
CREATE TABLE person_info (
person_id int AUTO_INCREMENT PRIMARY KEY,
person_name varchar(45) NOT NULL,
email varchar(45) NOT NULL,
city varchar(25) NOT NULL
);
其次,我们将使用INSERT INTO SELECT语句将位于德克萨斯州的人员 从person表 插入到 person_info表 中:
INSERT INTO person_info (person_name, email, city)
SELECT name, email, city
FROM person
WHERE city = 'Texas';
执行此语句后,我们可以使用SELECT查询来验证插入操作。我们将获得下面的输出,其中位于得克萨斯州城市的所有人都成功插入。
假设我们想将所有人的表数据插入到person_info表中,不过滤任何值;我们可以使用以下语句来实现:
INSERT INTO person_info Table person;
执行SELECT语句以验证数据。下面是输出结果: