Considere as tabelas abaixo:em que Aluno.matricula e Profess...
em que Aluno.matricula e Professor.matricula são respectivamente chaves primárias das tabelas Aluno e Professor; a chave primária da tabela Aula é composta pelos campos matricula_professor e matricula_aluno, sendo que matricula_professor é chave estrangeira ligada à tabela Professor e matricula_aluno é chave estrangeira ligada à tabela Aluno. A consulta escrita em SQL ANSI para encontrar quais professores não ministram aula para nenhum aluno é:
Comentários
Veja os comentários dos nossos alunos
SELECT matricula
FROM professor
WHERE NOT EXISTS (SELECT matricula
FROM Aluno WHERE EXISTS
(SELECT aula.matricula_professor FROM aula
WHERE (aula.matricula_aluno =
aluno.matricula) AND
(professor.matricula =
aula.matricula_professor)))
Na consulta interna, o banco de dados irá retornar verdadeiro se um professor tiver pelo menos um aluno, dentro da relação Aula.
Sendo isso verdadeiro, a consulta externa com a cláusula NOT EXISTIS torna-se falsa, pois esperava um retorno vazio. Logo nunhum professor será apresentado, nessa ocasião.
Quando o banco encontrar um professor que não tenha nenhum aluno. O retorno da consulta interna será vazio, logo o NOT EXISTS torna-se verdadeiro, e será retornado a matricula do Professor que não tenha nenhum aluno.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo