-- Explicando: -- Este texto exemplifica uma Fase 2 do PraticaSQL. -- ---------------------------------------------------------------------------------------------------------------------------------------- -- A questão é apresentada já com AR que a responde. -- Escrevendo a resposta em AR e a 'traduzindo' a resposta para SQL. -- Esta atividade é condizente com as atividades da FASE 4 do PraticaSQL. -- -- Analisando o modelo de Dados. -- Escolhemos o modelo que conecta editoras aos livros, livros em autorias e autorias em autores. -- Sobre este contexto, projetamos a pergunta: -- -- Quais são as editoras com maior quantidade de autores vinculados (autores que -- escreveram livros da editora)? Exiba as 3 primeiras editoras. -- -- Tabelas comprometidas na resposta: editoras, livros e autorias -- -- A sequencia de operações para responder esta pergunta: -- junção..: a = editoras-> e [[ e.cpeditora=l.ceditora ]] livros -> l -- junção..: b = a [[ a.cplivro=t.ceclivro ]] autorias -> t -- em b surge ceautor e já existe cpeditora -- projeção: r = b [[ cpeditora, ceautor ]] (distintos) ordenado por cpeditora -- sobre r é feita a contagem de autores/editora, na forma -- projeção: r [[ cpeditora, CONTA(ceautor) ]] limite 3 agrupados por cpeditora ordenado por cpeditora -- -- 'traduzindo' para SQL -- junção..: a = editoras-> e [[ e.cpeditora=l.ceditora ]] livros -> l create temporary table a as (select * from editoras as e inner join livros as l on e.cpeditora=l.ceeditora); -- junção..: b = a [[ a.cplivro=t.celivro ]] autorias -> t -- em b surge ceautor e já existe cpeditora create temporary table b as (select * from a inner join autorias as t on a.cplivro=t.celivro); -- projeção: r = b [[ cpeditora, ceautor ]] (distintos) ordenado por cpeditora -- sobre r será feito a contagem de autores / editora, na forma create temporary table r as (select distinct cpeditora, ceautor from b order by cpeditora); -- projeção: r [[ cpeditora, CONTA(ceautor) ]] limite 3 -- agrupados por cpeditora ordenado por cpeditora select cpeditora, COUNT(ceautor) from r group by cpeditora order by COUNT(ceautor) limit 3 -- Nota: Na AR o limite de registro fica mais fácil de ser 'entendido -- -- Se for preciso consultar os dados nas tabelas temporárias, é possivel escrever: select * from a; select * from b; select * from r; -- -- Como esta sequência de operações e comandos gerou 'residuos de dados' é de boa prática executar: drop table a,b,r; -- -- Comentários: -- O resultado do processamento foi a exibição de uma lista com o cpeditora e a quantidade de 2 autores vinculados à editora. -- SE quisermos exibir um resultado mais consistente podemos inserir mais linhas nas tabelas. insert into autorias (cpautoria,celivro,ceautor, dtcadautoria) values (20,10,40,'2025-04-10'), (25,10,50,'2025-04-10'), (30,10,70,'2025-04-10'), (35,10,80,'2025-04-10'), (40,10,130,'2025-04-10'), (45,20,10,'2025-04-10'), (50,20,40,'2025-04-10'), (55,20,50,'2025-04-10'), (60,20,70,'2025-04-10'), (65,20,80,'2025-04-10'), (70,20,130,'2025-04-10'), (75,30,10,'2025-04-10'), (80,30,20,'2025-04-10'), (85,30,40,'2025-04-10'), (90,30,50,'2025-04-10'), (95,30,70,'2025-04-10'), (100,30,80,'2025-04-10'), (105,50,130,'2025-04-10'), (110,50,10,'2025-04-10'), (115,50,70,'2025-04-10'), (120,50,80,'2025-04-10'), (125,50,130,'2025-04-10'), (130,60,10,'2025-04-10'), (135,60,20,'2025-04-10'), (140,60,40,'2025-04-10'), (145,60,50,'2025-04-10'), (150,70,10,'2025-04-10'), (155,70,20,'2025-04-10'), (160,70,70,'2025-04-10'), (165,70,80,'2025-04-10'), (170,70,130,'2025-04-10'), (175,80,10,'2025-04-10'), (180,80,50,'2025-04-10'), (185,80,70,'2025-04-10'), (190,80,80,'2025-04-10'), (195,80,130,'2025-04-10'), (200,110,20,'2025-04-10'), (205,110,40,'2025-04-10'), (210,110,50,'2025-04-10'), (215,110,130,'2025-04-10'), (220,100,40,'2025-04-10'), (225,100,50,'2025-04-10'), (230,100,70,'2025-04-10'), (235,100,80,'2025-04-10'), (240,90,50,'2025-04-10'), (245,90,70,'2025-04-10'), (250,90,80,'2025-04-10'), (255,40,20,'2025-04-10'), (260,40,40,'2025-04-10'), (265,40,50,'2025-04-10'), (270,40,80,'2025-04-10'), (275,40,130,'2025-04-10'); -- -- Depois de executar este 'INSERT' podemos executar novamente os comandos para obter uma resposta significativa. -- Como teste altere o valor do limit de 3 para 5 e veremos, então as 5 editoras com maior quantidade de autores. --