Instrução INSERT INTO VALUES()

Descobrimos como criar tabelas, agora vamos dar uma olhada detalhada em como adicionar dados a uma tabela usando uma consulta SQL.

Na verdade, é muito simples fazer isso, mas existem várias nuances. A opção mais simples para inserir dados em uma tabela requer a especificação de duas coisas:

  • nomes de coluna
  • valores da coluna (dados)

Os nomes das colunas devem ser especificados, pois muitas vezes as colunas possuem valores padrão que não são especificados ao inserir os dados. E geralmente toda tabela tem pelo menos uma dessas colunas, por exemplo, id da linha.

A forma geral da consulta para inserir dados em uma tabela é a seguinte:

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

Por exemplo, se você deseja inserir um novo registro na tabela do usuário, a consulta ficaria assim:

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

Instrução INSERT INTO SELECT

Outro cenário comum para inserir dados em uma tabela é retirá-los de outra tabela, esquema ou até mesmo de um DBMS.

Para fazer isso, existe outro formato de consulta INSERT INTO, no qual, ao invés da parte VALUES, você pode especificar uma consulta para selecionar dados.

A forma geral de tal solicitação é:

INSERT INTO table (column1, column2, column3)
SELECT-request;

Vamos escrever uma consulta que adicionará todos os usuários da tabela de funcionários à tabela de usuários:

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

Temos vários dados na tabela de funcionários, mas deles selecionamos apenas dois campos - o nome e a hora de chegada à empresa.

Além disso, a tabela de usuários exige que você especifique o nível de usuário - nível. Os funcionários não têm um nível na tabela de funcionários, portanto, usaremos o fato de que a tabela de usuários tem um valor padrão para o campo de nível. Apenas não especificamos o nível e o SQL definirá o valor padrão.

Suponha que não estamos satisfeitos com o valor padrão e queremos que o nível seja 99 e substitua user.created_time pela data de hoje, então podemos escrever isto:

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Há muito mais que poderia ser feito, mas acho que isso será suficiente por enquanto. Você pode ler mais na página oficial do MySQL.