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