MySQL INSERT INTO SELECT语句

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;  

执行查询后,我们可以看到下面的输出,其中表中有五行:

MySQL INSERT INTO SELECT语句

假设我们想要将一个属于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查询来验证插入操作。我们将获得下面的输出,其中位于得克萨斯州城市的所有人都成功插入。

MySQL INSERT INTO SELECT语句

假设我们想将所有人的表数据插入到person_info表中,不过滤任何值;我们可以使用以下语句来实现:

INSERT INTO person_info Table person;

执行SELECT语句以验证数据。下面是输出结果:

MySQL INSERT INTO SELECT语句

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程