Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

subqueries

Ola gente, gostaria de saber se nesta questão 4 o uso do seguinte código também seria válido:

select a.id, a.nome from aluno a
join matricula m on m.aluno_id = a.id
where a.id in(select m.aluno_id from matricula m);

obrigado

6 respostas

desculpe, passei a query errada. É esta abaixo a correta:

select a.id, a.nome from aluno a
where a.id not in(select m.aluno_id from matricula m);
solução!

Oi Taruman

Nesse exemplo eu acredito que funcione sim. Você comparou os resultados ?

Oi Caio!

Os resultados bateram sim. É que sempre bate aquela dúvida pra quem ainda não tem muita experiência rs. Valeu!

Pensei na mesma query que o Taruman, usando a clausula NOT IN. Acho até mais intuitiva que o EXISTS.

Pensei na mesma query que o Taruman, usando a clausula NOT IN. Acho até mais intuitiva que o EXISTS.

Aqui também utilizei sub-queries, mas realmente não havia pensando no LEFT JOIN:

--Modo 1 (JOIN e DISTINCT para as repetições com a table matricula): SELECT DISTINCT A.nome from aluno A JOIN matricula M on M.aluno_id = A.id ORDER BY A.nome

--Modo 2 (Através de sub-query com a palavra reservada IN): SELECT A.nome FROM aluno A WHERE A.id IN(SELECT M.aluno_id from matricula M) ORDER BY A.nome

--P/ obter os alunos que não tem matrícula, pode-se sub-query e utilizar o NOT IN. SELECT A.nome FROM aluno A WHERE A.id NOT IN(SELECT M.aluno_id from matricula M) ORDER BY A.nome