MySQL INSERIR EM SELECIONAR

Resumo : neste tutorial você aprenderá como usar a INSERT INTO SELECTinstrução MySQL para inserir dados em uma tabela, onde os dados vêm do resultado de uma SELECTinstruçã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 VALUESclá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 VALUEScláusula, você pode usar o resultado de uma SELECTinstrução como fonte de dados da INSERTinstrução.

O seguinte ilustra a sintaxe da INSERT INTO SELECTinstruçã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 VALUEScláusula, você usa uma SELECTinstrução. A SELECTinstrução pode recuperar dados de uma ou mais tabelas.

Observe que o número de colunas em column_liste select_list deve ser igual.

A INSERT INTO SELECTinstruçã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_namee another_tablena INSERT INTO ... SELECTinstruçã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, USAtornem 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 )
MySQL INSERT INTO SELECT - dados dos clientes a serem inseridos

Segundo, insira os clientes localizados na California USAtabela customersna  supplierstabela usando a INSERT INTO SELECTinstruçã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: 0Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, verifique a inserção consultando os dados da  supplierstabela:

SELECT * FROM suppliers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está a saída:

inserção do mysql no exemplo selecionado

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 INSERTinstrução para inserir valores provenientes das SELECTinstruçõ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 SELECTinstruções com as COUNT()funções para obter o total de produtos, funcionários e pedidos.
  • Segundo, use os valores retornados da SELECTinstrução no lugar dos valores na VALUEScláusula da INSERTinstrução.

Terceiro, consulte os dados da tabela stats:

SELECT * FROM stats;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
mysql insere na seleção na lista de valores

Resumo

  • Use a INSERT INTO SELECTinstrução MySQL para inserir dados em uma tabela a partir de um conjunto de resultados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *