程序员社区

MySQL系列教程 --- 39、选择插入(insert into select)

有时我们想将一个表的数据插入到同一个或不同数据库中的另一个表中。使用 INSERT 查询手动输入这些数据并不容易。我们可以使用 MySQL INSERT INTO SELECT 查询来优化这个过程。它允许我们快速填充 MySQL 表。本节将介绍 INSERT INTO SELECT 命令、语法及其用例。

在INSERT INTO SELECT语句中的MySQL允许我们将值插入其中的数据来自一个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;  

在这里,TABLE table1等效于 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 示例

让我们通过一个例子来了解 INSERT INTO SELECT 语句在 MySQL 中是如何工作的。首先,我们需要使用下面给出的语句创建一个名为“ 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;    

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

file

假设我们想将一个属于德克萨斯城的人的名字插入到另一个表中。以下查询用于搜索位于德克萨斯州的所有人员:

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 查询来验证插入操作。我们将获得以下输出,其中位于德克萨斯城的所有人员都成功插入。

file

假设我们想把所有person的表数据插入person_info表,不过滤任何值;我们可以使用以下语句来做到这一点:

INSERT INTO person_info Table person;  

执行 SELECT 语句以验证数据。这是输出:

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 39、选择插入(insert into select)

一个分享Java & Python知识的社区