Insira na sintaxe selecionada do Oracle. Noções básicas de T-SQL. DML. Inserindo múltiplas linhas

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 uma 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.

Nas seções anteriores, examinamos o trabalho de recuperação de dados de tabelas pré-criadas. Agora é hora de descobrir como podemos criar/excluir tabelas, adicionar novos registros e excluir os antigos. Para estes fins em SQL Existem operadores como: CRIAR- cria uma mesa, ALTERAR- altera a estrutura da tabela, DERRUBAR- exclui uma tabela ou campo, INSERIR- adiciona dados à tabela. Vamos começar a conhecer este grupo de operadores da operadora INSERIR.

1. Adicionando linhas inteiras

Como o nome sugere, o operador INSERIR usado para inserir (acrescentar) linhas a uma tabela de banco de dados. A adição pode ser feita de várias maneiras:

  • - adicione uma linha completa
  • - adicionar parte de uma linha
  • - adicione resultados da consulta.

Portanto, para adicionar uma nova linha a uma tabela, precisamos especificar o nome da tabela, listar os nomes das colunas e especificar o valor de cada coluna usando a construção INSIRA DENTRO DE nome_tabela (campo1, campo2 ...) VALORES (valor1, valor2...). Vejamos um exemplo.

INSERT INTO Vendedores (ID, Endereço, Cidade, Nome_do_vendedor, País) VALORES("6", "1st Street", "Los Angeles", "Harry Monroe", "EUA")

Você também pode alterar a ordem dos nomes das colunas, mas ao mesmo tempo precisa alterar a ordem dos valores no parâmetro VALORES.

2. Adicionando parte das linhas

No exemplo anterior, ao usar o operador INSERIR marcamos explicitamente os nomes das colunas da tabela. Usando esta sintaxe, podemos pular algumas colunas. Isso significa que você insere valores para algumas colunas, mas não os fornece para outras. Por exemplo:

INSERT INTO Vendedores (ID, Cidade, Nome_do_vendedor) VALORES("6", "Los Angeles", "Harry Monroe")

Neste exemplo, não especificamos um valor para duas colunas Endereço E País. Você pode excluir algumas colunas da declaração INSIRA DENTRO DE, se isso permitir a definição da tabela. Neste caso, uma das condições deve ser atendida: esta coluna é definida como válida NULO(ausência de qualquer valor) ou o valor padrão especificado na definição da tabela. Isso significa que se nenhum valor for especificado, o valor padrão será usado. Se estiver faltando uma coluna de uma tabela que não permite que valores apareçam em suas linhas NULO e não tiver um valor padrão definido, o SGBD gerará uma mensagem de erro e a linha não será adicionada.

3. Adicionando dados selecionados

No exemplo anterior, inserimos dados em tabelas inserindo-os manualmente na consulta. No entanto, o operador INSIRA DENTRO DE nos permite automatizar este processo se quisermos inserir dados de outra tabela. Para este propósito em SQL existe uma construção como INSERIR EM ... SELECIONAR .... Esse design permite selecionar simultaneamente dados de uma tabela e inseri-los em outra. Vamos supor que temos outra mesa Vendedores_EU com uma lista de vendedores dos nossos produtos na Europa e precisamos adicioná-los à tabela geral Vendedores. A estrutura dessas tabelas é a mesma (mesmo número de colunas e mesmos nomes), mas os dados são diferentes. Para fazer isso, podemos escrever a seguinte consulta:

INSERT INTO Vendedores (ID, Endereço, Cidade, Nome_do_vendedor, País) SELECIONEID, endereço, cidade, nome_do_vendedor, país FROM Sellers_EU

É preciso ficar atento para que os valores das chaves internas não se repitam (campo EU IA), caso contrário ocorrerá um erro. Operador SELECIONAR também pode incluir sugestões ONDE para filtrar dados. Deve-se notar também que o SGBD não presta atenção aos nomes das colunas contidas na instrução SELECIONAR, apenas a ordem em que estão organizados é importante para ela. Portanto, os dados na primeira coluna especificada que foi selecionada devido a SELECIONAR, será preenchido na primeira coluna da tabela em qualquer caso Vendedores, especificado após o operador INSIRA DENTRO DE, independentemente do nome do campo.

4. Copiando dados de uma tabela para outra

Freqüentemente, ao trabalhar com bancos de dados, é necessário criar cópias de quaisquer tabelas para fins de backup ou modificação. Pendência cópia completa tabelas em SQL há um operador separado SELECIONE EM. Por exemplo, precisamos criar uma cópia da tabela Vendedores, você precisará escrever a solicitação da seguinte maneira:

SELECIONE * EM Vendedores_novos DE Vendedores

Ao contrário do design anterior INSERIR EM ... SELECIONAR ... Quando os dados são adicionados a uma tabela existente, o design copia os dados para a nova tabela. Você também pode dizer que a primeira construção importa dados e a segunda exporta. Ao usar o design SELECIONE ... EM ... DE ... O seguinte deve ser considerado:

  • - você pode usar qualquer frase no operador SELECIONAR, como Agrupar por E TENDO
  • - você pode usar uma junção para adicionar dados de várias tabelas
  • - os dados só podem ser adicionados a uma tabela, não importa de quantas tabelas foram retirados.

Equipe adiciona linhas à tabela ou visualização da tabela principal.

Sintaxe do comando SQL INSERT

Inserir sintaxe de comando


Palavras-chave e parâmetros básicos do comando INSERT
  • esquema- identificador de permissão, geralmente correspondente ao nome de algum usuário
  • vista de mesa- o nome da tabela na qual as linhas devem ser inseridas; se uma visualização for especificada, as linhas serão inseridas na tabela principal da visualização
  • subconsulta_1- uma subconsulta que o servidor processa da mesma forma que uma visualização
  • coluna- uma tabela ou coluna de visualização na qual o valor da frase é inserido para cada linha inserida VALORES ou subconsulta; se uma das colunas da tabela for omitida desta lista, o valor da coluna da linha inserida será o valor da coluna padrão definido quando a tabela foi criada. Se uma lista de colunas for completamente omitida, a cláusula VALORES ou a consulta deve determinar valores para todas as colunas da tabela
  • VALORES- define uma string de valores que serão inseridos na tabela ou view; o significado deve ser definido na frase VALORES para cada coluna na lista de colunas
  • subconsulta_2- uma subconsulta que retorna linhas inseridas na tabela; a lista de seleção desta subconsulta deve ter o mesmo número de colunas que a lista de colunas da instrução

Declaração com a frase VALORES adiciona uma única linha à tabela. Esta linha contém os valores definidos pela frase VALORES.
Declaração com subconsulta em vez de uma frase VALORES adiciona todas as linhas retornadas pela subconsulta à tabela. O servidor processa subconsulta e insere cada linha retornada na tabela. Se a subconsulta não selecionar nenhuma linha, o servidor não inserirá nenhuma linha na tabela.
Subconsulta pode acessar qualquer tabela ou visualização, incluindo a tabela de asserção de destino . O servidor atribui valores aos campos em novas linhas com base na posição interna das colunas na tabela e na ordem dos valores das frases VALORES ou na lista de seleção de consultas. Se alguma coluna estiver faltando na lista de colunas, o servidor atribui a ela os valores padrão definidos quando a tabela foi criada. Se alguma dessas colunas tiver uma restrição NOT NULL, o servidor retornará um erro indicando que a restrição foi violada e anulará a instrução INSERT.
Quando uma instrução INSERT é emitida, qualquer gatilho INSERT definido na tabela é habilitado.

INSERIR NO Exemplo 1

INSIRA DENTRO DE departamento VALORES(50, "PRODUTOS", "SÃO FRANCISCO");

INSIRA DENTRO DE Clientes (cidade, cname, cnum) VALORES('Londres', 'Hoffman', 2001);

INSERIR NO Exemplo 2
O comando a seguir copia os dados dos funcionários da empresa cujas comissões ultrapassam 25% do rendimento para a tabela de bônus:

INSIRA DENTRO DE bônus SELECT nome, trabalho, sal, comm FROM emp WHERE comm > 0,25 * sal;

INSERIR NO Exemplo 3
Se você precisar inserir NULO-value, você deve especificá-lo como um valor normal da seguinte forma:

INSIRA DENTRO DE Vendedores VALORES (1001,'Peel',NULL,12);

INSERIR NO Exemplo 4
O comando pode ser usado para recuperar valores de uma tabela e colocá-los em outra por meio de uma consulta. Para isso, basta substituir a frase VALORESà solicitação correspondente:

INSIRA DENTRO DE Londonstaff SELECT * FROM Vendedores WHERE cidade = 'Londres';

INSERIR MySQL

Para inserir novas linhas em um banco de dados MySQL, use Comando INSERIR, exemplos de comando são dados abaixo:
INSERIR NO Exemplo 1.
Inserir nova linha para a tabela nome_tabela.

INSIRA DENTRO DE

INSERIR NO Exemplo 2.
Inserindo uma nova linha na tabela table_name indicando a inserção de dados nas colunas que precisamos.

INSIRA DENTRO DE nome_tabela VALUES('1','165','0','nome');

No banco de dados MySQLÉ possível inserir várias novas linhas usando um comando.
INSERIR NO Exemplo 3.
Inserindo várias linhas na tabela table_name.

INSIRA DENTRO DE nome_tabela (tbl_id, chislo, chislotwo, nome) VALORES ('1′,'159′,'34','nome1′), ('2′,'14','61','nome2′), ('3 ′,'356′,'8′,'nome3');

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 "".

A instrução INSERT insere novos registros em uma tabela. Nesse caso, os valores das colunas podem ser constantes literais ou ser o resultado da execução de uma subconsulta. No primeiro caso, uma instrução INSERT separada é usada para inserir cada linha; no segundo caso, serão inseridas tantas linhas quantas forem retornadas pela subconsulta.

A sintaxe do operador é a seguinte:

    INSIRA DENTRO DE [ (,...) ]

    (VALORES(,…))

  1. | (VALORES PADRÃO)

Como você pode ver pela sintaxe apresentada, a lista de colunas é opcional (isto é dito colchetes na descrição da sintaxe). Caso falte, a lista de valores inseridos deverá ser completa, ou seja, fornecer valores para todas as colunas da tabela. Neste caso, a ordem dos valores deve corresponder à ordem especificada pela instrução CREATE TABLE para a tabela na qual as linhas são inseridas. Além disso, esses valores devem ser do mesmo tipo de dados das colunas nas quais são inseridos. Como exemplo, considere inserir uma linha na tabela Product criada pela seguinte instrução CREATE TABLE:

    CRIAR TABELA produto

    criador de caracteres (1) NÃO NULO,

    modelo varchar(4) NÃO NULO,

    digite varchar(7) NÃO NULO

Suponha que você queira adicionar a esta tabela o modelo de PC 1157 do fabricante B. Isso pode ser feito com a seguinte instrução:

    INSERIR NO Produto

    VALORES ("B" , 1157 , "PC" ) ;

Se você especificar uma lista de colunas, poderá alterar sua ordem “natural”:

    INSERT INTO Produto (tipo, modelo, fabricante)

    VALORES ("PC" , 1157 , "B" ) ;

Parece que este é um recurso completamente desnecessário, o que apenas torna o design mais complicado. No entanto, ganha se as colunas tiverem valores padrão. Considere a seguinte estrutura de tabela:

    CRIAR TABELA produto_D

    criador de caractere (1) NULO,

    modelo varchar(4) NULO,

    digite varchar (7) NÃO NULO PADRÃO "PC"

Observe que aqui os valores de todas as colunas possuem valores padrão (as duas primeiras são NULL e a última coluna é do tipo - PC). Agora poderíamos escrever:

    INSERT INTO Product_D (modelo, fabricante)

    VALORES(1157, "B");

Neste caso, o valor que falta ao inserir uma linha será substituído pelo valor padrão - PC. Observe que se uma coluna não receber um valor padrão em uma instrução CREATE TABLE e uma restrição NOT NULL for especificada para proibir o uso de NULL nessa coluna da tabela, então o valor padrão NULL será assumido.

Surge a pergunta: é possível não especificar uma lista de colunas e, mesmo assim, utilizar os valores padrão? A resposta é sim. Para fazer isso, em vez de especificar explicitamente o valor, use a palavra reservada DEFAULT :

    INSERIR NO Produto_D

    VALORES ("B" , 1158 , PADRÃO ) ;

Como todas as colunas possuem valores padrão, para inserir uma linha com valores padrão você poderia escrever:

    INSERIR NO Produto_D

    VALORES(PADRÃO, PADRÃO, PADRÃO);

Porém, para este caso existe uma construção especial DEFAULT VALUES (ver sintaxe do operador), com a qual o operador acima pode ser reescrito na forma

    INSERIR EM PRODUTO_D VALORES PADRÃO;

Observe que ao inserir uma linha em uma tabela, todas as restrições impostas a esta tabela são verificadas. Podem ser restrições de chave primária ou de índice exclusivo, restrições CHECK ou restrições de integridade referencial. Se alguma restrição for violada, a inserção da linha será rejeitada. Vamos agora considerar o caso do uso de uma subconsulta. Suponha que precisamos inserir na tabela Product_D todas as linhas da tabela Product relacionadas aos modelos de computadores pessoais (type = 'PC'). Como os valores que precisamos já estão em alguma tabela, gerar manualmente as linhas inseridas é, em primeiro lugar, ineficaz e, em segundo lugar, pode permitir erros de entrada. Usar uma subconsulta resolve estes problemas:

A utilização do símbolo “*” na subconsulta justifica-se neste caso, pois a ordem das colunas é a mesma para ambas as tabelas. Se este não fosse o caso, uma lista de colunas teria que ser aplicada na instrução INSERT, na subconsulta ou em ambas, o que corresponderia à ordem das colunas:

Aqui, como antes, você não pode especificar todas as colunas se quiser usar os valores padrão existentes, por exemplo:

Neste caso, a coluna tipo da tabela Produto_D será substituída pelo valor padrão PC para todas as linhas inseridas.

Observe que ao usar uma subconsulta contendo um predicado, somente as linhas para as quais o valor do predicado for TRUE (não UNKNOWN!) serão inseridas. Em outras palavras, se a coluna de tipo na tabela Produto fosse NULLable e esse valor estivesse presente em várias linhas, essas linhas não seriam inseridas na tabela Produto_D.

A técnica artificial de usar uma subconsulta que forma uma linha com a cláusula UNION ALL permite superar a limitação de inserir uma linha na instrução INSERT ao usar o construtor de linha na cláusula VALUES. Portanto, se precisarmos inserir várias linhas usando uma instrução INSERT, podemos escrever:

    INSERIR NO Produto_D

    SELECIONE o fabricante "B" AS, modelo 1158 AS, tipo "PC" AS

    UNIÃO TODOS

    SELECIONE "C", 2190, "Laptop"

    UNIÃO TODOS

    SELECIONE "D" , 3219 , "Impressora" ;

Utilizar UNION ALL é preferível a UNION mesmo que seja garantida a ausência de linhas duplicadas, pois neste caso não será realizada nenhuma verificação para eliminar duplicatas.

Deve-se notar que a inserção de múltiplas tuplas usando o construtor de linha já está implementada em Sistema de gerenciamento de banco de dados relacional (SGBD), desenvolvido pela Microsoft Corporation.Structured Query Language) é uma linguagem de computador universal usada para criar, modificar e manipular dados em bancos de dados relacionais. servidor SQL 2008. Dada esta possibilidade, a última consulta pode ser reescrita como:

    INSERIR EM VALORES Produto_D

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),


Principal