O INSERT é responsável pela inserção de uma ou mais linhas em uma tabela, além de permitir que as colunas de destino sejam informadas em qualquer ordem em que forem declaradas.

Visão geral

Considere a tabela produtos da Tabela 1, onde precisamos inserir dois novos produtos.


id descricao preco categoria
1 Papel oficio (c/100 folhas) 4.50 2
2 Lápis preto (unid) 0.50 1
3 Xerox (1 folha PB) 0.25 4
Tabela 1. Tabela produtos

Para executar a inserção como solicitado no problema podemos executar uma query como no exemplo abaixo:

INSERT INTO
  produtos
  (id, descricao, categoria, preco)
VALUES
  (4, 'Resma Ofício c/500 folhas', 2, 17.50),
  (5, 'Resma Ofício c/1000 folhas', 2, 23.00);

Vamos entender a query executada:

  • Nas linhas 1 e 2 utilizamos o comando INSERT INTO e em seguida o nome da tabela que receberá a ação, no caso a tabela produtos. É possível notar que alguns dados da tabela não foram preenchidos, pois eles não têm uma restrição NOT NULL, ou seja, seus valores não obrigatórios;
  • Na linha 3 informamos a ordem das colunas que serão informadas durante a query;
  • Note que na linha 4 utilizamos a palavra reservada VALUES para que nas linhas 5 e 6 informemos entre parênteses os valores que serão inseridos, respeitando o formato do valor (varchar, int, etc.);
  • Além disso, é possível inserir múltiplos valores a partir de um mesmo comando INSERT, como é feito entre as linhas 5 e 6. Para isso, basta inserir uma vírgula e em seguida criar outros parênteses com os valores que serão inseridos.

Sintaxe

INSERT INTO
  [ nome-tabela ]
  ([ coluna1, coluna2, … ])
VALUES 
  ([ valor-coluna1, valor-coluna2, … ])

Na prática

Exemplo 1

A inclusão de dados pode ainda ser feita a partir de comando de SELECT, e como vantagem desse recurso podemos facilmente migrar dados de uma tabela para outra, como mostra o seguinte exemplo de utilização:

INSERT INTO produtos
 (id, descricao, preco, categoria)
  (SELECT id, descricao, preco, categoria FROM produtos WHERE id = 1)

É importante lembrar que ao inserir dados a partir de um SELECT os tipos de dados precisam ser do mesmo tipo. Além disso, é preciso tomar cuidado para que os valores não causem duplicidade em algum campo que contenha a restrição Unique, como chaves-primárias. Note que, quando incluímos dados através de um comando SELECT, suprimimos a palavra VALUES da instrução.


Exemplo 2

Podemos também fazer a inserção dos dados sem informar o nome das colunas: basta seguir a ordem em que as colunas da tabela foram criadas. Podemos ver melhor como esse tipo de comando e feito a partir do exemplo abaixo:

INSERT INTO produtos 
 VALUES
  (4, 'Resma Ofício c/500 folhas', 17.50, 2);

Veja que estamos fazendo o mesmo tipo de inserção do primeiro exemplo, sua única diferença foi que não informamos o nome das colunas.

Exemplo 3

Podemos também utiliar a sintaxe completa do comando insert, veja abaixo:

INSERT INTO produtos (id, descricao, preco, categoria)
 VALUES
  (4, 'Resma Ofício c/500 folhas', 17.50, 2);

Confira também