-- Uma Universidade tem várias Faculdades agregadas. A Bibiliteca de uma Faculdade tem seu
-- acervo formado pelas indicações da Reitoria da Universidade. Nem sempre a Reitoria
-- acompanha as mudanças de indicações de bibliografias das disciplinas de todas as
-- Faculdades agregadas. Isso faz com o acervo das bibliotecas passe a ficar com livros sem
-- referencias em bibliografias ads disciplinas. Recentemente, montaram um Banco de Dados
-- com dados sobre os acervos de TODAS as bibliotecas de Todas as Faculdades, bem como os
-- cadastros de TODAS as bibliografias de TODAS as disciplinas.
-- Agora é possível responder a seguinte pergunta:
-- Quais são os códigos de livros e título de todos os livros que constam e que não constam em
-- bibliografias das disciplinas? Devem ser exibidos os nomes das disciplinas quando constar
-- o livro em sua bibliografia e quando o livro não constar em bibliografia de nenhuma disciplinas
-- no nome da disciplina do livro deve aparecer "NÃO CONSTA". 
-- Elabore sua resposta com base nas estruturas das tabelas:
-- livros e bibliografias e disciplinas da base de dados do PRATICASQL.
-- Escreva as operações de AR que devem ser feitas e traduza as operações para os
-- correspondentes comandos SQL.
-- Resposta:
-- O modelo em questão apresenta relacionamentos [livros](1,N:0,N)[disciplinas], sendo que este
-- relacionamento é nomeado bibliografia. Sendo assim temos:
-- [livros](1,1:0,N)[bibliografias](1,N:1,1)[disciplinas], portanto podem existir livros SEM
-- referência em nenhuma bibliografia (de disciplinas). Isso indica que, para termos uma lista de
-- TODOS os livros deveremos fazer uma junção aberto para o lado de livros.
-- Em AR:
-- Junção(Fec): A <- disciplinas->d [[ d.cpdisciplina=b.cedisciplina ]] bibliografia->b
-- Jun.Ab.Dir.: B <- A [[ A.celivro=l.cplivro ][ livros->l
-- Projeção...: B [[ cplivro,
--                   txtituloacervo,
--                   SE cpdisciplina não é nulo ENTÃO txnome
--                                              SENÃO "Não Consta" ]]
-- Em SQL, teremos:
-- Junção(Fec): A <- disciplinas->d [[ d.cpdisciplina=b.cedisciplina ]] bibliografia->b
create temporary table A as 
       (select * from disciplinas as d inner join bibliografia as b on d.cpdisciplina=b.cedisciplina);
-- Jun.Ab.Dir.: B <- A [[ A.celivro=l.cplivro ][ livros->l
create temporary table B as (select * from A RIGHT JOIN livros as l ON A.celivro=l.cplivro);
-- Projeção...: B [[ cplivro,
--                   txtituloacervo,
--                   SE cpdisciplina não é nulo ENTÃO txnome
--                                              SENÃO "Não Consta" ]]
select cplivro, txtituloacervo, CASE WHEN cpdisciplina IS NOT NULL THEN txnome ELSE 'NÃO CONSTA' END from B
-- Combinando os comandos SQL em um só comando:
-- Agora vamos combinar estes comandos:
select cplivro, txtituloacervo, CASE WHEN cpdisciplina IS NOT NULL THEN txnome ELSE 'NÃO CONSTA' END
       from disciplinas as d inner join bibliografia as b on d.cpdisciplina=b.cedisciplina
                             RIGHT JOIN livros as l ON b.celivro=l.cplivro;