作者/来源:新睿云小编 发布时间:2019-11-15
本次我们将学习如何使用MySQL INSERT INTO SELECT语句将数据插入表中,其中数据来自SELECT语句筛选后的结果。
一、MySQL INSERT INTO SELECT概述
INSERT带有在VALUES子句中指定的列值列表的语句将一个或多个行插入表中。
INSERT INTO table_name(c1,c2,...)
VALUES(v1,v2,..);
除了在VALUES子句中使用行值外,您还可以将SELECT语句的结果用作语句的数据源INSERT。
下面说明了该INSERT INTO SELECT语句的语法:
INSERT INTO table_name(column_list)
SELECT
select_list
FROM
another_table
WHERE
condition;
在此语法中,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)
);
请注意,您将在后续教程中学习如何创建新表。现在,您只需要执行此语句即可创建 suppliers表。
假设所有客户都California, USA成为公司的供应商。以下查询查找位于美国加利福尼亚州的所有客户:
SELECT
customerNumber,
customerName,
phone,
addressLine1,
addressLine2,
city,
state,
postalCode,
country
FROM
customers
WHERE
country = 'USA' AND
state = 'CA';
MySQL INSERT INTO SELECT-要插入的客户数据
其次,使用INSERT INTO ... SELECT语句插入谁在客户定位California USA从 customers表到 suppliers表:
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';
它返回以下消息,指示已成功插入11行。
11 row(s) affected Records: 11 Duplicates: 0 Warnings: 0
第三,通过查询suppliers表中的数据来验证插入 :
SELECT * FROM suppliers;
这是展示结果:
三、mysql插入选择示例
列表中的using SELECT语句VALUES
首先,创建一个新的表名为stats:
CREATE TABLE stats (
totalProduct INT,
totalCustomer INT,
totalOrder INT
);
其次,使用INSERT语句插入来自SELECT语句的值:
INSERT INTO stats(totalProduct, totalCustomer, totalOrder)
VALUES(
(SELECT COUNT(*) FROM products),
(SELECT COUNT(*) FROM customers),
(SELECT COUNT(*) FROM orders)
);
在此示例中:
首先,将SELECT语句与COUNT()函数一起使用以获取总产品,员工和订单。
第二,使用从SELECT语句返回的值代替语句VALUES子句中的值INSERT。
第三,从表中查询数据stats:
SELECT * FROM stats;