Insira na sintaxe. Instrução SQL INSERT INTO SELECT. Exemplos de consulta sql INSERT INTO em um banco de dados MySQL

Usando SQL, você pode copiar informações de uma tabela para outra.

A instrução INSERT INTO SELECT copia dados de uma tabela e os insere em uma tabela existente.

Instrução SQL INSERT INTO SELECT,

A instrução INSERT INTO SELECT seleciona dados de uma tabela e os insere em uma tabela existente. Quaisquer linhas existentes na tabela de destino não serão alteradas.

SQL INSERT INTO SELECT, Sintaxe

Podemos copiar todas as colunas de uma tabela para outra, tabela existente:

INSIRA DENTRO DE mesa 2
SELECIONE DE tabela 1;

Ou podemos copiar apenas as colunas que desejamos para outra tabela existente:

INSIRA DENTRO DE mesa 2
(nome_coluna(s))
SELECIONAR nome_coluna(s)
DE tabela 1;

Versão de demonstração do banco de dados

Neste tutorial usaremos o conhecido banco de dados Northwind.

Abaixo está uma seleção da tabela "Clientes":

ID do usuárioNome do clienteA pessoa de contatoEndereçocidadeCódigo postalUm país
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlim 12209 Alemanha
2 Ana Trujillo Emparedados e sorvetes Ana Trujillo Avenida. da Constituição 2222 México D. F. 05021 México
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 México D. F. 05023 México

E a seleção da tabela “Fornecedores”:

SQL INSERT INTO SELECT, Exemplos

Copiando apenas algumas colunas de “Fornecedores” para “Clientes”:

Copiando apenas fornecedores alemães para “Clientes”.

A consulta sql INSERT INTO faz sentido quando uma tabela de banco de dados foi criada. Ou seja, a tabela existe, tem nome, criou linhas e colunas. a tabela é criada pelo operador: , a tabela é modificada pelo operador .

consulta sql INSERT INTO - sintaxe de consulta

consulta sql INSERT INTO tem a seguinte sintaxe:

INSERT INTO nome_tabela (entre parênteses, se necessário, insira uma lista de colunas onde deseja inserir dados) VALUES dados inseridos1, dados inseridos2, dados3 inseridos.

Você pode inserir uma opção IGNORE entre INSERT e INTRO. Não é obrigatório. Necessário para proteger as chaves primárias ao editar uma tabela. Caso contrário, se ocorrer duplicação de chaves primárias durante a edição, ao inserir a opção IGNORE, a primeira linha com a chave primária permanecerá na tabela que está sendo editada e as demais chaves primárias serão excluídas. Por padrão, omitimos esta opção.

Existem opções opcionais LOW_PRIORITY e DELAYED. Eles determinam as prioridades para adicionar informações ao banco de dados. O primeiro especifica a espera pela liberação do banco de dados, o segundo significa o armazenamento em buffer das informações.

A linha na consulta: INSERT com a frase VALUES permitirá adicionar uma única linha à tabela do banco de dados. A cláusula VALUES contém os valores desses dados.

Subconsultas podem ser especificadas em vez da frase VALUES. INSERT com uma subconsulta adiciona as linhas retornadas pela subconsulta à tabela. O servidor de banco de dados processa a subconsulta e insere todas as linhas retornadas na tabela. O servidor não insere linhas a menos que a subconsulta as selecione.

  • subquery_1 - uma subconsulta que o servidor processa da mesma maneira que a visualização
  • subquery_2 é uma subconsulta que retorna linhas inseridas na tabela. A lista desta subconsulta deve ter o mesmo número de colunas que a lista de colunas INSERT.

As subconsultas praticamente não são usadas em um banco de dados MySQL.

Exemplos de consulta sql INSERT INTO em um banco de dados MySQL

Inserimos novas linhas no banco de dados MySQL usando o comando INSERT INTRO.

Primeiro exemplo.

Insira novas linhas na tabela table_name.

INSERT INTO nome_tabela VALUES ('2′,'145′,'1′,'nome');

Isso significa que queremos inserir os valores 2.145,1,name nas colunas da tabela table_name. Como as colunas não são especificadas, os valores são preenchidos em todas as colunas da tabela.

Exemplo dois.

Insira informações nas colunas obrigatórias (especificadas) da tabela table_name.

INSERT INTO nome_tabela (cliente_cliente, cliente_subcliente, cliente_mail) VALUES ('nome1','subnome1',' [e-mail protegido]′), ('nome2','subnome2',' [e-mail protegido]′), ('nome3','subnome3',(' [e-mail protegido]′);

Igor Serov especialmente para o site "".

Última atualização: 13/07/2017

Para adicionar dados, use o comando INSERT, que possui a seguinte sintaxe formal:

INSERT nome_tabela [(lista_coluna)] VALORES (valor1, valor2, ... valorN)

Primeiro vem a expressão INSERT INTO, depois entre parênteses você pode especificar uma lista de colunas separadas por vírgulas às quais os dados devem ser adicionados e, no final, após a palavra VALUES, os valores a serem adicionados para as colunas são listados em parênteses.

Por exemplo, suponha que o seguinte banco de dados tenha sido criado anteriormente:

CRIAR BANCO DE DADOS produtosdb; VÁ USAR produtosdb; CREATE TABLE Produtos (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Fabricante NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Preço MONEY NOT NULL)

Vamos adicionar uma linha usando o comando INSERT:

INSERIR VALORES DE PRODUTOS ("iPhone 7", "Apple", 5, 52000)

Após a execução bem-sucedida no SQL Server Management Studio, a mensagem "1 linha(s) afetada(s)" deverá aparecer no campo de mensagem:

Vale considerar que os valores das colunas entre parênteses após a palavra-chave VALUES são passados ​​na ordem em que são declarados. Por exemplo, na instrução CREATE TABLE acima, você pode ver que a primeira coluna é Id. Mas como o atributo IDENTITY é especificado para ela, o valor desta coluna é gerado automaticamente e pode ser omitido. A segunda coluna representa ProductName, portanto o primeiro valor, a string “iPhone 7”, será passado para essa coluna. O segundo valor - a string "Apple" será passada para a terceira coluna Fabricante e assim por diante. Ou seja, os valores são passados ​​para as colunas da seguinte forma:

    Nome do produto: "iPhone 7"

    Fabricante: "Apple"

Além disso, ao inserir valores, você pode especificar as colunas imediatas às quais os valores serão adicionados:

INSERIR EM Produtos (nome do produto, preço, fabricante) VALORES ("iPhone 6S", 41000, "Apple")

Aqui o valor é especificado para apenas três colunas. Além disso, agora os valores são transmitidos na ordem das colunas:

    Nome do produto: "iPhone 6S"

    Fabricante: "Apple"

Para colunas não especificadas (neste caso ProductCount), um valor padrão será adicionado se o atributo DEFAULT for especificado, ou um valor NULL. No entanto, as colunas não especificadas devem ser anuláveis ​​ou ter um atributo DEFAULT.

Também podemos adicionar várias linhas de uma vez:

INSERIR EM VALORES DE PRODUTOS ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

Neste caso, três linhas serão adicionadas à tabela.

Além disso, ao adicionar, podemos especificar que a coluna deve ter um valor padrão usando a palavra-chave DEFAULT ou um valor NULL:

INSERIR EM Produtos (ProductName, Fabricante, ProductCount, Preço) VALORES ("Mi6", "Xiaomi", DEFAULT, 28000)

Neste caso, será utilizado o valor padrão da coluna ProductCount (se estiver definido, se não estiver, então NULL).

Se todas as colunas tiverem um atributo DEFAULT que especifica um valor padrão ou forem anuláveis, você poderá inserir valores padrão para todas as colunas:

INSERIR EM PRODUTOS VALORES PADRÃO

Mas se pegarmos a tabela Produtos, então tal comando falhará com erro, pois vários campos não possuem o atributo DEFAULT e ao mesmo tempo não permitem o valor NULL.

O que é INSERIR EM?

O principal objetivo dos sistemas de banco de dados é armazenar dados nas tabelas. Os dados geralmente são fornecidos por programas aplicativos executados no banco de dados. Para esse fim, o SQL possui o comando INSERT que é usado para armazenar dados em uma tabela. O O comando INSERT cria uma nova linha na tabela para armazenar dados.

Sintaxe básica

Vejamos a sintaxe básica do comando SQL INSERT mostrado abaixo.

INSERT INTO `nome_tabela`(coluna_1,coluna_2,...) VALUES (valor_1,valor_2,...);

  • INSERIR EM `nome_tabela`é o comando que diz ao servidor MySQL para adicionar uma nova linha em uma tabela chamada `table_name`.
  • (coluna_1,coluna_2,...) especifica as colunas a serem atualizadas na nova linha
  • VALORES (valor_1, valor_2,...) especifica os valores a serem adicionados à nova linha

Ao fornecer os valores dos dados a serem inseridos na nova tabela, o seguinte deve ser considerado ao lidar com diferentes tipos de dados.

  • Tipos de dados de string- todos os valores da string devem ser colocados entre aspas simples.
  • Tipos de dados numéricos- todos os valores numéricos devem ser fornecidos diretamente, sem colocá-los entre aspas simples ou duplas.
  • Tipos de dados de data- coloque os valores de data entre aspas simples no formato "AAAA-MM-DD".

Exemplo:

Suponha que temos a seguinte lista de novos membros da biblioteca que precisam ser adicionados ao banco de dados.

Nomes completos Data de nascimento gênero Endereço físico endereço postal Número de contato Endereço de email
Leonardo Hofstadter Macho crista de madeira 0845738767
Sheldon Cooper Macho crista de madeira 0976736763
Rajesh Koothrappali Macho Fairview 0938867763
Leslie Winkle 14/02/1984 Macho 0987636553
Howard Wolowitz 24/08/1981 Macho Parque Sul PO Caixa 4563 0987786553

Vamos "INSERIR os dados um por um. Começaremos com Leonard Hofstadter. Trataremos o número de contato como um tipo de dados numérico e não colocaremos o número entre aspas simples.

INSERT INTO `membros` (`nomes_completos`,`sexo`,`endereço_físico`,`número_de contato`) VALORES ("Leonard Hofstadter","Masculino","Woodcrest",0845738767);

A execução do script acima elimina o 0 do número de contato de Leonard. Isso ocorre porque o valor será tratado como um valor numérico e o zero (0) no início será eliminado, pois não é significativo.

Para evitar tais problemas, o valor deve ser colocado entre aspas simples, conforme mostrado abaixo -

INSERT INTO `membros` (`nomes_completos`,`sexo`,`endereço_físico`,`número_de contato`) VALORES ("Sheldon Cooper","Masculino","Woodcrest", "0976736763");

No caso acima, zero (0) não será descartado

Alterar a ordem das colunas não afeta a consulta INSERT, desde que os valores corretos tenham sido mapeados para as colunas corretas.

A consulta mostrada abaixo demonstra o ponto acima.

INSERT INTO `membros` (`número_de_contato`,`sexo`,`nomes_completos`,`endereço_físico`)VALUES ("0938867763","Masculino","Rajesh Koothrappali","Woodcrest");

As consultas acima ignoraram a coluna da data de nascimento, por padrão, o MySQL irá inserir valores NULL em colunas que são ignoradas na consulta INSERT.

Vamos agora inserir o registro de Leslie que tem a data de nascimento fornecida. O valor da data deve ser colocado entre aspas simples usando o formato "AAAA-MM-DD".

INSERT INTO `membros` (`nomes_completos`,`data_de_nascimento`,`sexo`,`endereço_físico`,`número_de contato`) VALORES ("Leslie Winkle","14/02/1984","Masculino","Woodcrest"," 0987636553");

Todas as consultas acima especificaram as colunas e as mapearam para valores na instrução de inserção. Se estivermos fornecendo valores para TODAS as colunas da tabela, podemos omitir as colunas da consulta de inserção.

INSERIR EM VALORES `membros` (9,"Howard Wolowitz","Masculino","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Vamos agora usar a instrução SELECT para visualizar todas as linhas na tabela de membros.SELECT * FROM `members`;

número de membronomes completosgênerodata de nascimentoendereço físicoendereço postalnúmero_de_contatoe-mail
1 Janete JonesFêmea21-07-1980 Lote da Primeira Rua nº 4Bolsa Privada0759 253 542 Este endereço de e-mail está protegido contra spambots. Você precisa do JavaScript habilitado para visualizá-lo.
2 Janete Smith JonesFêmea23-06-1980 Melrose 123NULONULOEste endereço de e-mail está protegido contra spambots. Você precisa do JavaScript habilitado para visualizá-lo.
3 Robert PhilMacho12-07-1989 Rua 3 34NULO12345 Este endereço de e-mail está protegido contra spambots. Você precisa do JavaScript habilitado para visualizá-lo.
4 Glória WilliamsFêmea14-02-1984 Rua 2 23NULONULONULO
5 Leonardo HofstadterMachoNULOcrista de madeiraNULO845738767 NULO
6 Sheldon CooperMachoNULOcrista de madeiraNULO976736763 NULO
7 Rajesh KoothrappaliMachoNULOcrista de madeiraNULO938867763 NULO
8 Leslie WinkleMacho14-02-1984 crista de madeiraNULO987636553 NULO
9 Howard WolowitzMacho24-08-1981 Parque SulPO Caixa 4563987786553 Este endereço de e-mail está protegido contra spambots. Você precisa do JavaScript habilitado para visualizá-lo.

Observe que o número de contato de Leonard Hofstadter eliminou o zero (0) do número de contato. Os demais números de contato não descartaram o zero (0) no início.

Inserindo em uma tabela de outra tabela

O comando INSERT também pode ser usado para inserir dados de outra tabela em uma tabela. A sintaxe básica é mostrada abaixo.

INSERT INTO tabela_1 SELECT * FROM tabela_2;

Vejamos agora um exemplo prático, criaremos uma tabela fictícia para categorias de filmes para fins de demonstração. Chamaremos a nova tabela de categorias de categorias_archive. O script mostrado abaixo cria a tabela.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Execute o script acima para criar a tabela.

Vamos agora inserir todas as linhas da tabela de categorias na tabela de arquivo de categorias. O script mostrado abaixo nos ajuda a conseguir isso.

INSERT INTO `categories_archive` SELECT * FROM `categories`;

A execução do script acima insere todas as linhas da tabela de categorias na tabela de arquivo de categorias. Observe que as estruturas da tabela deverão ser as mesmas para que o script funcione. Um script mais robusto é aquele que mapeia os nomes das colunas na tabela de inserção para aqueles na tabela que contém os dados.

A consulta mostrada abaixo demonstra seu uso.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

Executando a consulta SELECT

SELECIONE * DE `categories_archive`

fornece os seguintes resultados mostrados abaixo.

Categoria IDNome da Categoriaobservações
1 ComédiaFilmes com humor
2 RomânticoHistórias de amor
3 ÉpicoHistória de filmes antigos
4 HorrorNULO
5 Ficção científicaNULO
6 Filme de açãoNULO
7 AçãoNULO
8 Comédia românticaNULO
9 Desenhos animadosNULO
10 Desenhos animadosNULO

Resumo

  • O comando INSERT é usado para adicionar novos dados em uma tabela
  • Os valores de data e string devem ser colocados entre aspas simples.
  • Os valores numéricos não precisam ser colocados entre aspas.
  • O comando INSERT também pode ser usado para inserir dados de uma tabela em outra.

Além da instrução SELECT discutida anteriormente, a Linguagem de Manipulação de Dados (DML) contém três outras instruções: INSERT, UPDATE e DELETE. Assim como a instrução SELECT, essas três instruções operam em tabelas ou em visualizações. Este artigo discute a instrução INSERT e as outras duas instruções serão discutidas no próximo artigo.

Instrução INSERT insere linhas (ou partes de linhas) em uma tabela. Existem duas formas diferentes desta instrução:

INSERIR tab_name [(col_list)] VALORES PADRÃO | VALORES ((DEFAULT | NULL | expressão ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Convenções de sintaxe

A primeira forma da instrução permite inserir uma linha (ou parte dela) na tabela. E a segunda forma da instrução INSERT permite inserir em uma tabela o conjunto de resultados de uma instrução SELECT ou um procedimento armazenado executado por uma instrução EXECUTE. O procedimento armazenado deve retornar dados a serem inseridos na tabela. Quando usada com uma instrução INSERT, uma instrução SELECT pode selecionar valores de uma tabela diferente ou da mesma tabela na qual os dados estão sendo inseridos, desde que os tipos de dados das colunas correspondentes sejam compatíveis.

Para ambos os formulários, o tipo de dado de cada valor inserido deve ser compatível com o tipo de dado da coluna correspondente da tabela. Todas as strings e dados temporários devem ser colocados entre aspas; Os valores numéricos não precisam ser colocados entre aspas.

Inserindo uma única linha

Para ambas as formas da instrução INSERT, especificar explicitamente a lista de colunas é opcional. Não listar colunas é o mesmo que especificar todas as colunas da tabela.

Parâmetro VALORES PADRÃO insere valores padrão para todas as colunas. Colunas com tipo de dados TIMESTAMP ou propriedade IDENTITY são inseridas por padrão com valores que são gerados automaticamente pelo sistema. Para colunas de outros tipos de dados, o valor padrão não nulo correspondente é inserido, se disponível, ou NULL, caso contrário. Se uma coluna não permitir valores nulos e não tiver um valor padrão definido, a instrução INSERT falhará e uma mensagem será exibida.

O exemplo abaixo insere linhas na tabela Employee do banco de dados SampleDb, demonstrando o uso de uma instrução INSERT para inserir uma pequena quantidade de dados no banco de dados:

USE SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES (38640, "Alexey", "Vasin", "d3");

Existem dois jeitos diferentes inserindo valores em nova linha. A instrução INSERT no exemplo abaixo usa explicitamente a palavra-chave NULL e insere um valor NULL na coluna correspondente:

USE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Para inserir valores em algumas (mas não em todas) colunas de uma tabela, geralmente você precisa especificar explicitamente essas colunas. Colunas não especificadas devem permitir valores NULL ou ter um valor padrão definido.

USE SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

Os dois exemplos anteriores são equivalentes. Na tabela Employee, a única coluna que permite valores NULL é a coluna DepartmentNumber, e todas as outras colunas foram desabilitadas pela cláusula NOT NULL na instrução CREATE TABLE.

Ordem dos valores em Oferta de VALORES As instruções INSERT podem diferir da ordem especificada na instrução CREATE TABLE. Nesse caso, a ordem deles deve corresponder à ordem em que as colunas correspondentes estão listadas na lista de colunas. Abaixo está um exemplo de inserção de dados em uma ordem diferente do original:

USE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALORES ("d1", "Batonov", 34993, "Andrey");

Inserindo múltiplas linhas

A segunda forma da instrução INSERT insere uma ou mais linhas selecionadas por uma subconsulta na tabela. O exemplo abaixo mostra como inserir linhas em uma tabela usando a segunda forma da instrução INSERT. Nesse caso, uma consulta é executada para selecionar os números e nomes dos departamentos localizados em Moscou, e o conjunto de resultados resultante é carregado em uma nova tabela criada anteriormente.

A nova tabela MoscowDepartment criada no exemplo acima possui as mesmas colunas da tabela Department existente, exceto pela coluna Location ausente. A subconsulta na instrução INSERT seleciona todas as linhas na tabela Departamento para as quais o valor da coluna Local é "Moscou", que são então inseridas na nova tabela criada no início da consulta.

O exemplo abaixo mostra outra maneira de inserir linhas em uma tabela usando a segunda forma da instrução INSERT. Neste caso, uma consulta é executada para selecionar números pessoais, números de projetos e datas de início do projeto para todos os funcionários com a posição “Gerente” que trabalham no projeto p2 e então carrega o conjunto de resultados resultante em uma nova tabela criada no início de A pergunta:

USE SampleDb; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Antes de inserir linhas usando a instrução INSERT, as tabelas MoscowDepartment e ManagerTeam (nos exemplos acima) estavam vazias. Se a tabela já existisse e contivesse linhas com dados, novas linhas seriam adicionadas a ela.


Principal