Publicidade

Insert com select

Olá pessoal.

Hoje tenho uma dica rápida e simples, muito útil para o “INSERT” do SQL, que é o “SELECT”!

Sim, você pode inserir “N” linhas em uma tabela através do “INSERT” de uma só vez, usando o resultado de um select, poupando muito trabalho de fazer diversos inserts.

Vamos supor que tenhamos uma tabela de usuários, conforme abaixo:

Tabela: Usuarios
Campos: LOGIN as varchar(10)
        NOME as varchar(30)
        IDADE as integer
        SEXO as varchar(1)

Com os seguintes dados:
LOGIN         NOME                Idade   Sexo
juca.juca     Juca da Silva Juca  25      M
jannaina.ina  Janaina Tainá       18      F
james.johnny  James johnny        43      M
orion.oreo    Orion d'Oreo        37      M
maria.jose    Maria Jose          34      F

 Vamos dizer que eu queira separa todos os homens em uma tabela separada, logo, teremos que filtrar pelo campo “SEXO = ‘M'” e inseri-los na nova tabela abaixo:

Tabela: Homens
Campos: LOGIN as varchar(10)
        IDADE as integer

 Em um “INSERT” comum, faríamos desta forma:

INSERT INTO Homens
    (LOGIN,
     IDADE)
VALUES
    ('juca.juca',
     25),
    ('james.johnny',
     43),
    ('orion.oreo',
     37)

 Mas nesse caso, vamos colocar um “SELECT” dentro do “VALUES” do “INSERT”, assim o resultado da nossa consulta serão os dados do values do insert. Faremos assim:

INSERT INTO Homens
    (LOGIN,
     IDADE)
select LOGIN,
       IDADE
from Usuarios
where SEXO = 'M'

 Dessa forma, nosso “SELECT” pesquisa na tabela “Usuarios” por todos registros em que o “SEXO = ‘M'”, retornando os campos solicitados pelo “VALUES”, que são “LOGIN” e “IDADE”.

OBSERVAÇÂO IMPORTANTE: Os campos do select tem de ser exatamente iguais aos campos do “INSERT”, tanto na quantidade de campos, quanto nos tipos. No exemplo acima o “INSERT” pede 2 campos, o “SELECT” tem que retornar 2 campo, os campos são respectivamente “varchar” e “integer”, os campos do select tem que ser “varchar” e “integer” respectivamente.

É isso pessoal, dúvidas, só postar aqui embaixo.

Abraço

Deixe um comentário

O seu endereço de e-mail não será publicado.