Select com subselects

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

Olá pessoal, estou com uma duvida cruel, esses dias eu vi um select muito doido e estou tentando entende-lo mas não cheguei a conclusão nenhuma, vocês poderial me explicar passo a passo esses dois select´s?

Selecionar tudo

select nome, end, (select * from tab2) from tab1

Selecionar tudo

select nome, end from tab1, (select * from tab2)



Fico grato!
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

No primeiro caso

Selecionar tudo

select nome, end, (select * from tab2) from tab1
você esta apresentando o campo nome e end da tab1 e todos os campos da tab2;

Selecionar tudo

select nome, end from tab1, (select * from tab2)
você esta apresentando o campo nome e end da tab1 e transformando o select dentro dos parenteses numa tabela onde você pode utilizar os campos no where e no select para apresentar...


Nos exemplos que você colocou a unica diferença é que no segundo não está apresentando as informações da tab2, se você tivesse colocado:

Selecionar tudo

select nome, end, tab2.* from tab1, (select * from tab2)
Daria na mesma!!

Abraços
:-o
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

Jessica nesse segundo caso tenho que dar um alias para a tab2? pra chamar lá em cima?
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

sim tem que ter um alias, um exemplo:

Selecionar tudo

Select t1.nome, t1.end, total.salario
  from tab1 t1
         ,(select salario
             from tab2
           where total > 1) total
 where t1.nome like 'A%'
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

vish meu... o select você consegue por ele em qualquer lugar viu =D

mais para não ocorrer problemas... é sempre bom você colocar um join neles não é?.... exemplo

Selecionar tudo

select em.*, (select dname from dept dp where dp.deptno = em.deptno) dname from emp em
/
isso é a mesma coisa que isso

Selecionar tudo

select em.*, d.dname from emp em, dept d where d.deptno = em.deptno
/
só qui com o segundo caso foi um join da maneira correta o banco interpretou com um sort-merge e lá feiz um order by automaticamente
e no primeiro caso foi a mesma coisa.... só não ordenou automaticamente...
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

Pessoal valeu mesmo fiz vários testes aqui e deu pra ter uma boa base brigadão a todos






:wink:
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes