MySQL INSERT INTO SELECT

摘要:在本教程中,您将学习如何使用 MySQL INSERT INTO SELECT语句将数据插入表中,其中数据来自SELECT语句的结果。

MySQL INSERT INTO SELECT概述

在上一教程中,您学习了如何使用INSERT语句以及VALUES子句中指定的列值列表向表中插入一行或多行。

INSERT INTO table_name(c1,c2,...)
VALUES(v1,v2,..);Code language: SQL (Structured Query Language) (sql)

除了在VALUES子句中使用行值之外,您还可以使用SELECT语句的结果作为INSERT语句的数据源。

下面说明了INSERT INTO SELECT语句的语法:

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table
WHERE
   condition;Code language: SQL (Structured Query Language) (sql)

在此语法中,您可以使用VALUES语句,而不是使用SELECT子句。 SELECT语句可以从一个或多个表中检索数据。

当您想要将数据从其他表复制到一个表或将多个表中的数据汇总到一个表中时, INSERT INTO SELECT语句非常有用。

MySQL INSERT INTO SELECT示例

首先,创建一个名为suppliers新表

CREATE TABLE suppliers (
    supplierNumber INT AUTO_INCREMENT,
    supplierName VARCHAR(50) NOT NULL,
    phone VARCHAR(50),
    addressLine1 VARCHAR(50),
    addressLine2 VARCHAR(50),
    city VARCHAR(50),
    state VARCHAR(50),
    postalCode VARCHAR(50),
    country VARCHAR(50),
    customerNumber INT,
    PRIMARY KEY (supplierNumber)
);Code language: SQL (Structured Query Language) (sql)

请注意,您将在后续教程中学习如何创建新表。现在,您只需执行此语句即可创建suppliers表。

假设所有来自California, USA的客户都成为该公司的供应商。以下查询查找位于美国加利福尼亚州的所有客户:

SELECT 
    customerNumber,
    customerName,
    phone,
    addressLine1,
    addressLine2,
    city,
    state,
    postalCode,
    country
FROM
    customers
WHERE
    country = 'USA' AND 
    state = 'CA';Code language: SQL (Structured Query Language) (sql)
MySQL INSERT INTO SELECT - customers data to be inserted

其次,使用INSERT INTO ... SELECT语句将客户表中位于California USA州的客户插入到suppliers customers中:

INSERT INTO suppliers (
    supplierName, 
    phone, 
    addressLine1,
    addressLine2,
    city,
    state,
    postalCode,
    country,
    customerNumber
)
SELECT 
    customerName,
    phone,
    addressLine1,
    addressLine2,
    city,
    state ,
    postalCode,
    country,
    customerNumber
FROM 
    customers
WHERE 
    country = 'USA' AND 
    state = 'CA';Code language: SQL (Structured Query Language) (sql)

它返回以下消息,表明已成功插入 11 行。

11 row(s) affected Records: 11  Duplicates: 0  Warnings: 0Code language: SQL (Structured Query Language) (sql)

第三,通过查询suppliers表中的数据来验证插入:

SELECT * FROM suppliers;Code language: SQL (Structured Query Language) (sql)

这是输出:

mysql 插入选择示例

VALUES列表中使用SELECT语句

首先,创建一个名为stats的新表:

CREATE TABLE stats (
    totalProduct INT,
    totalCustomer INT,
    totalOrder INT
);Code language: SQL (Structured Query Language) (sql)

其次,使用INSERT语句插入来自SELECT语句的值:

INSERT INTO stats(totalProduct, totalCustomer, totalOrder)
VALUES(
	(SELECT COUNT(*) FROM products),
	(SELECT COUNT(*) FROM customers),
	(SELECT COUNT(*) FROM orders)
);Code language: SQL (Structured Query Language) (sql)

在这个例子中:

  • 首先,使用带有COUNT()函数的SELECT语句来获取产品、员工和订单的总数。
  • 其次,使用从SELECT语句返回的值代替INSERT语句的VALUES子句中的值。

三、从表stats中查询数据:

SELECT * FROM stats;Code language: SQL (Structured Query Language) (sql)
mysql插入到值列表中的选择中

在本教程中,您学习了如何使用 MySQL INSERT INTO SELECT语句将数据从结果集中插入到表中。

本教程有帮助吗?