Resumo : neste tutorial você aprenderá como usar a INSERT INTO SELECT
instrução MySQL para inserir dados em uma tabela, onde os dados vêm do resultado de uma SELECT
instrução.
Introdução à instrução INSERT INTO SELECT do MySQL
A instrução INSERT permite inserir uma ou mais linhas em uma tabela com uma lista de valores de coluna especificados na VALUES
cláusula:
INSERT INTO table_name(c1,c2,...)
VALUES(v1,v2,..);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Além de usar valores de linha na VALUES
cláusula, você pode usar o resultado de uma SELECT
instrução como fonte de dados da INSERT
instrução.
O seguinte ilustra a sintaxe da INSERT INTO SELECT
instrução:
INSERT INTO table_name(column_list)
SELECT
select_list
FROM
another_table
WHERE
condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, em vez de usar a VALUES
cláusula, você usa uma SELECT
instrução. A SELECT
instrução pode recuperar dados de uma ou mais tabelas.
Observe que o número de colunas em column_list
e select_list deve ser igual.
A INSERT INTO SELECT
instrução pode ser muito útil quando você deseja copiar dados de outras tabelas para uma tabela ou resumir dados de várias tabelas em uma tabela.
Observe que é possível selecionar linhas em uma tabela e inseri-las na mesma tabela. Em outras palavras, o table_name
e another_table
na INSERT INTO ... SELECT
instrução pode fazer referência à mesma tabela.
Exemplo INSERT INTO SELECT do MySQL
Primeiro, crie uma nova tabela chamada 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)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que todos os clientes se California, USA
tornem fornecedores da empresa. A consulta a seguir encontra todos os clientes localizados em California, USA
:
SELECT
customerNumber,
customerName,
phone,
addressLine1,
addressLine2,
city,
state,
postalCode,
country
FROM
customers
WHERE
country = 'USA' AND
state = 'CA';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira os clientes localizados na California USA
tabela customers
na suppliers
tabela usando a INSERT INTO SELECT
instrução:
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';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Ele retornou a seguinte mensagem indicando que 11 linhas foram inseridas com sucesso.
11 row(s) affected Records: 11 Duplicates: 0 Warnings: 0
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, verifique a inserção consultando os dados da suppliers
tabela:
SELECT * FROM suppliers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Usando a instrução SELECT na lista VALUES
Primeiro, crie uma nova tabela chamada stats
:
CREATE TABLE stats (
totalProduct INT,
totalCustomer INT,
totalOrder INT
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, use a INSERT
instrução para inserir valores provenientes das SELECT
instruções:
INSERT INTO stats(totalProduct, totalCustomer, totalOrder)
VALUES(
(SELECT COUNT(*) FROM products),
(SELECT COUNT(*) FROM customers),
(SELECT COUNT(*) FROM orders)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo:
- Primeiro, use as
SELECT
instruções com asCOUNT()
funções para obter o total de produtos, funcionários e pedidos. - Segundo, use os valores retornados da
SELECT
instrução no lugar dos valores naVALUES
cláusula daINSERT
instrução.
Terceiro, consulte os dados da tabela stats
:
SELECT * FROM stats;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use a
INSERT INTO SELECT
instrução MySQL para inserir dados em uma tabela a partir de um conjunto de resultados.