Quando a tabela é criada, ela não contém dados. A primeira coisa a ser feita para que o banco de dados tenha alguma utilidade é inserir dados. Os dados são inseridos uma linha por vez. Também é possível inserir mais de uma linha usando um único comando, mas não é possível inserir algo que não seja uma linha completa. Mesmo que sejam conhecidos os valores de apenas algumas poucas colunas, deve ser inserida uma linha completa.
Para criar uma linha, é usado o comando INSERT. Este comando requer o nome da tabela e os valores das colunas. Por exemplo, considere a tabela de produtos no Capítulo 5:
CREATE TABLE produtos (
num_produto integer,
nome text,
preco numeric
);
Um exemplo de comando para inserir uma linha seria
INSERT INTO produtos VALUES (1, 'Queijo', 9.99);
onde valores dos dados estão listados na ordem em que as colunas foram criadas na tabela, separados por vírgulas. Normalmente os valores dos dados são literais (constantes), mas também são permitidas expressões escalares.
A sintaxe acima tem a desvantagem de ser necessário conhecer a ordem das colunas na tabela. Para evitar isso, também é possível listar as colunas explicitamente. Por exemplo, os dois comandos a seguir produzem o mesmo efeito que o comando acima:
INSERT INTO produtos (num_produto, nome, preco) VALUES (1, 'Queijo', 9.99);
INSERT INTO produtos (nome, preco, num_produto) VALUES ('Queijo', 9.99, 1);
Muitos usuários consideram uma boa prática sempre listar os nomes das colunas.
Se não forem conhecidos os valores de todas as colunas, será possível omitir algumas delas. Nesse caso, as colunas serão preenchidas com seus valores padrão. Por exemplo:
INSERT INTO produtos (num_produto, nome) VALUES (1, 'Queijo'); INSERT INTO produtos VALUES (1, 'Queijo');
A segunda forma é uma extensão PostgreSQL. Ele preenche as colunas da esquerda com tantos valores quantos forem fornecidos, e as restantes recebem o valor padrão.
Para ficar mais claro, também é possível solicitar valores padrão explicitamente, para colunas individuais ou para toda a linha:
INSERT INTO produtos (num_produto, nome, preco) VALUES (1, 'Queijo', DEFAULT); INSERT INTO produtos DEFAULT VALUES;
Podem ser inseridas várias linhas através de um único comando:
INSERT INTO produtos (num_produto, nome, preco) VALUES
(1, 'Queijo', 9.99),
(2, 'Pão', 1.99),
(3, 'Leite', 2.99);
Também é possível inserir o resultado de uma consulta (que pode ser nenhuma linha, uma linha ou várias linhas):
INSERT INTO produtos (num_produto, nome, preco)
SELECT num_produto, nome, preco FROM novos_produtos
WHERE data_de_liberacao = 'hoje';
Isto mostra o grande poder do mecanismo de consulta do SQL (veja o Capítulo 7) para lidar com as linhas a serem inseridas.
Ao inserir muitos dados ao mesmo tempo, deve ser considerado o uso do comando COPY. Não é tão flexível quanto o comando INSERT, mas é mais eficiente. Veja a Seção 14.4 para obter mais informações sobre como melhorar o desempenho da carga em massa.