INSERT¶
Atualiza uma tabela inserindo uma ou mais linhas na tabela. Os valores inseridos em cada coluna da tabela podem ser explicitamente especificados ou os resultados de uma consulta.
- Consulte também:
Sintaxe¶
Parâmetros obrigatórios¶
target_tableEspecifica a tabela de destino na qual inserir as linhas.
VALUES ( value | DEFAULT | NULL [ , ... ] ) [ , ( ... ) ]Especifica um ou mais valores a serem inseridos nas colunas correspondentes na tabela de destino.
Em uma cláusula
VALUES, você pode especificar o seguinte:value: insere o valor explicitamente especificado. O valor pode ser um literal ou uma expressão que é avaliada como um valor único.DEFAULT: insere o valor padrão para a coluna correspondente na tabela de destino.NULL: insere um valorNULL.
Cada valor da cláusula deve ser separado por uma vírgula.
Você pode inserir várias linhas especificando conjuntos adicionais de valores na cláusula. Para obter mais informações, consulte Notas de uso e Exemplos.
queryEspecifique uma instrução de consulta que retorna valores a serem inseridos nas colunas correspondentes. Isso permite a inserção de linhas em uma tabela de destino a partir de uma ou mais tabelas de origem.
Parâmetros opcionais¶
OVERWRITEEspecifica que a tabela de destino deve ser truncada antes de inserir os valores na tabela. Observe que especificar esta opção não afeta os privilégios de controle de acesso na tabela.
As instruções INSERT com
OVERWRITEpodem ser processadas dentro do escopo da transação atual, o que evita que instruções DDL confirmem uma transação, como por exemplo:Padrão: sem valor (a tabela de destino não é truncada antes de executar as inserções).
( target_col_name [ , ... ] )Especifica uma ou mais colunas na tabela de destino na qual os valores correspondentes são inseridos. O número de colunas de destino especificadas deve corresponder ao número de valores ou colunas especificadas (se os valores forem o resultado de uma consulta) na cláusula
VALUES.Padrão: sem valor (todas as colunas na tabela de destino são atualizadas).
Notas de uso¶
Usando um único comando INSERT, você pode inserir várias linhas em uma tabela especificando conjuntos adicionais de valores separados por vírgulas na cláusula VALUES.
Por exemplo, a seguinte cláusula inseriria 3 linhas em uma tabela de 3 colunas, com valores
1,2e3nas duas primeiras linhas e valores2,3e4na terceira linha:Para usar a opção OVERWRITE em INSERT, você deve usar uma função que tenha o privilégio DELETE sobre a tabela porque OVERWRITE apagará os registros existentes na tabela.
Alguns tipos de expressões não podem ser especificados na cláusula VALUES, incluindo as seguintes expressões:
Subconsultas
Por exemplo:
Valores do tipo de dados semiestruturados ou estruturados.
Por exemplo:
-
Por exemplo:
-
Por exemplo:
Como alternativa à cláusula VALUES, especifique a expressão em uma cláusula
query. Por exemplo, você pode substituir a seguinte expressão:por esta expressão:
A cláusula VALUES é limitada a 200.000 linhas. Este limite se aplica a uma única instrução INSERT INTO … VALUES e a uma única instrução INSERT INTO … SELECT … FROM VALUES. Considere usar o comando COPY INTO <tabela> para realizar um carregamento de dados em massa. Para obter mais informações sobre como usar a cláusula VALUES em uma instrução SELECT, consulte VALUES.
Para obter informações sobre como inserir dados em tabelas híbridas, consulte Carregamento de dados.
Exemplos¶
Os exemplos a seguir usam o comando INSERT.
Inserção de uma única linha usando uma consulta¶
Converter três valores de cadeia de caracteres em datas ou carimbos de data/hora e inseri-los em uma única linha na tabela mytable:
Similar ao exemplo anterior, mas especificando para atualizar apenas a primeira e terceira colunas da tabela:
Inserção de várias linhas usando valores explicitamente especificados¶
Crie a tabela employees e insira quatro linhas de dados nela, fornecendo conjuntos de valores em uma lista separada por vírgulas na cláusula VALUES:
Em inserções de várias linhas, certifique-se de que os tipos de dados dos valores inseridos sejam consistentes entre as linhas porque o tipo de dados da primeira linha é usado como um guia. Crie uma tabela e insira duas linhas:
A primeira inserção funciona como esperado:
A segunda inserção falha porque o tipo de dados do valor na segunda linha ('d') é uma cadeia de caracteres, que é diferente do tipo de dados numéricos do valor na primeira linha (3). A inserção falha, embora ambos os valores possam ser impostos para VARCHAR, que é o tipo de dados da coluna na tabela. A inserção falha mesmo que o tipo de dados do valor 'd' seja o mesmo que o tipo de dados da coluna v:
Quando os tipos de dados são consistentes nas linhas, a inserção é bem-sucedida e ambos os valores numéricos são impostos ao tipo de dados VARCHAR:
Inserção de várias linhas usando a consulta¶
Inserir várias linhas de dados da tabela contractors na tabela employees:
Selecionar somente aquelas linhas onde a coluna
worknumcontém o código de área650.Inserir um valor NULL na coluna
city.
Inserir várias linhas de dados da tabela contractors na tabela employees usando uma expressão de tabela comum:
Inserir colunas de duas tabelas (emp_addr, emp_ph) em uma terceira tabela (emp) usando um INNER JOIN na coluna id das tabelas de origem:
Inserção de várias linhas para dados JSON¶
Inserir dois objetos JSON em uma coluna VARIANT em uma tabela:
Inserção usando OVERWRITE¶
Este exemplo usa INSERT com OVERWRITE para reconstruir a tabela sf_employees a partir de employees depois que novos registros foram adicionados à tabela employees.
Aqui estão os dados iniciais de ambas as tabelas:
Essa instrução insere linhas na tabela sf_employees usando a cláusula OVERWRITE:
Como o INSERT usou a cláusula OVERWRITE, as linhas antigas do sf_employees desapareceram:
Gravar em uma tabela Apache Iceberg™ v3¶
O exemplo a seguir insere uma linha em uma tabela Apache Iceberg™ que está em conformidade com a v3 da especificação da tabela Apache Iceberg™: