-- Neste arquivo estão os comandos que foram desenvolvidos em sala de aula com a turma da Noite.
-- É importante que você crie um arquivo com seus comandos como estão apresentados nesta referencia.
-- No SEU arquivo indique a operação e a seguir o comando que implementa a operação.
-- Como o SEU arquivo será um 'campo de teste', você não precisa escrever a indicação da operação em AR.
-- Escreva somente o comando SQL.
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- 2022-02-23
-- Seleção
-- Def...: Monta um subconjunto de linhas de uma tabela que atendem a uma condição.
-- Em AR.: TAB [[condição de comparação]]
-- Ex-AR.: funcionarios[[fkdepto dentre 'A01','A11','B01','C01']]
-- Em SQL:    select * from TAB where condição de comparação
-- Ex-SQL: Selecionando os funcionarios onde o código do departamento dentre 'A01','A11','B01','C01'.
select * from funcionarios where deptoid in ('A01','A11','B01','C01');
-- Selecionando TODAS AS LINHAS DE UMA TABELA
select * from cursos where 1=1;
-- Selecionando as linhas de cursos onde a dtcadcurso<=2010-12-31
select * from cursos where dtcadcurso<='2010-12-31';
-- Selecionando as linhas de cursos com dtcadcurso entre 01-01-2010 e 31-12-2010.
select * from cursos where dtcadcurso between '2010-01-01' and '2010-12-31';
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Projeção
-- Def...: Exibe campos escolhidos de uma tabela.
-- Em AR.: TAB[[lista de campos]]
-- Ex-AR.: cursos[[pkcurso, txnomecurso, qtcargahoraria]]
-- Em SQL: select lista de campos from TAB;
-- Ex-SQL: Projetando pkcurso, txnomecurso, qtcargahoraria da tabela cursos
select pkcurso, txnomecurso, qtcargahoraria from cursos;
-- CUIDADO!!!
-- EM SQL É POSSÍVEL COMBINAR COMANDOS DE OPERAÇÕES DIFERENTES.
-- Quais são os códigos, nomes e carga horária dos cursos criados em 2010?
-- AR A <- cursos[[dtcadcurso entre '01-01-2010' e '31-12-2010']]
--         A [[pkcurso, txnomecurso, qtcargahoraria]]
-- Em SQL
create temporary table A AS (select * from cursos where dtcadcurso between '2010-01-01' and '2010-12-31');
select pkcurso, txnomecurso, qtcargahoraria from A;
-- ENTRETANTO, em SQL pode-se escrever:
select pkcurso, txnomecurso, qtcargahoraria 
       from cursos 
	   where dtcadcurso between '2010-01-01' and '2010-12-31';
-- 'Dropando' a tabela A - A tabela A "existe" no espaço de memória do usuário - por isso se diz que
-- o 'create temporary table' cria 'tabelas per-user'.
DROP TABLE A;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- junção (fechada ou natural)
-- Def...: Exibe as linhas emparelhadas de duas tabelas atendendo a uma condição.
-- Em AR.: TAB1[[condição de emparelhamento]]TAB2
-- Ex-AR.: departamentos[[departamentos.iddepto=funcionarios.deptoid]]funcionarios
-- Em SQL: select * from TAB1, TAB2 WHERE <condição do emparelhamento>; -- (ANSI:87)
-- Ex-SQL: Emparelhando departamentos e funcionarios
select * from departamentos, funcionarios where departamentos.iddepto=funcionarios.deptoid; -- (ANSI:87)
-- Em 92 o SQL incorporou o operador JOIN (já usado em grandes SGBDs). Este operador permite fazer 5 operações:
--     * Produto Cartesiano,
--     * Junção fechada (natural),
--     * Junção aberta pela direita,
--     * Junção aberta pela esquerda e
--     * Junção completa (aberta pela direita e pela esquerda).
-- Para a Junção Natural (ou fechada) o Operador JOIN tem o complemento INNER, na forma:
-- Em-SQL: select * from TAB1 INNER JOIN TAB2 ON <condição do emparelhamento>; -- (ANSI:92)
-- Ex-SQL: Emparelhando departamentos e funcionarios
select * from departamentos INNER JOIN funcionarios ON departamentos.iddepto=funcionarios.deptoid; -- (ANSI:92)
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- junção aberta pela direita
-- Def...: Exibe as linhas emparelhadas de duas tabelas atendendo a uma condição trazendo TODAS as linhas
--         de uma tabela posicionada à DIREITA do operador JOIN.
-- Em AR.: tab1[[condição de emparelhamento][tab2
-- Ex-AR.: medicos[[medicos.especialidadeid=especialidadesmedicas.idespecialidade][especialidadesmedicas
-- Em SQL: select * from TAB1 RIGHT JOIN TAB2 ON <condição do emparelhamento>; -- (ANSI:92)
-- Ex-SQL: Exiba os medicos de TODAS as especialidades médicas.
select * from medicos RIGHT JOIN especialidadesmedicas
                      ON medicos.especialidadeid=especialidadesmedicas.idespecialidade;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- junção aberta pela esquerda
-- Def...: Exibe as linhas emparelhadas de duas tabelas atendendo a uma condição trazendo TODAS as linhas
--         de uma tabela posicionada à ESQUERDA do operador JOIN.
-- Em AR.: tab1][condição de emparelhamento]]tab2
-- Ex-AR.: medicos][medicos.instituicaodeensinoid=instituicoesdeensino.idinstituicaodeensino]]instituicoesdeensino
-- Em SQL: select * from TAB1 LEFT JOIN TAB2 ON <condição do emparelhamento>; -- (ANSI:92)
-- Ex-SQL: Exiba todos os medicos e suas instituições de ensino correpondentes.
select * from medicos LEFT JOIN instituicoesdeensino
                      ON medicos.instituicaodeensinoid=instituicoesdeensino.idinstituicaodeensino;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- junção completa (aberta pelos dois lados - direita e esquerda)
-- Def...: Exibe as linhas emparelhadas de duas tabelas atendendo a uma condição trazendo TODAS as linhas
--         das DUAS tabelas (emparelhadas e não emparelhadas).
-- Em AR.: tab1][condição de emparelhamento][tab2
-- Ex-AR.: medicos][medicos.instituicaodeensinoid=instituicoesdeensino.idinstituicaodeensino][instituicoesdeensino
-- Em SQL: select * from TAB1 FULL OUTER JOIN TAB2 ON <condição do emparelhamento>; -- (ANSI:92)
-- Ex-SQL: Exiba todas as linhas de médicos emparelhadas com todas as intituições de ensino.
select * from medicos FULL OUTER JOIN instituicoesdeensino
                      ON medicos.instituicaodeensinoid=instituicoesdeensino.idinstituicaodeensino;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- produto cartesiano
-- Def...: Emparelha TODAS as linhas de uma tabela com CADA (e todas) linha de outra tabela.
-- Em AR.: tab1 X tab2
-- Ex-AR.: cores X cursos
-- Em SQL: select * from cores, cursos; -- (ANSI:87)
-- Ex-SQL: 
select * from cores, cursos;
-- Em SQL: select * from cores CROSS JOIN cursos; -- (ANSI:92)
-- Ex-SQL: 
select * from cores CROSS JOIN cursos;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- 2022-03-09
-- Para U, - e ^ as tabelas DEVEM SER União compatíveis.
-- Tabelas são UC, se e somente se, tiverem o MESMO ESQUEMA:
-- Campos com MESMO Nome, MESMA Ordem na tabela, MESMO Tipo de Dado e MESMO Tamanho
-- Vamos criar as tabelas que sejam UC, para depois fazer estas operações.
create temporary table F1 AS(
select idfuncionario, txprenomes, txsobrenome, funcaoid from funcionarios where funcaoid<=6);
create temporary table F2 AS(
select idfuncionario, txprenomes, txsobrenome, funcaoid from funcionarios where funcaoid between 5 and 7);
-- NOTA: F1 e F2 são UC.
-- União
-- Def...: Exibe as comuns e não comuns de duas tabelas UC
-- Em AR.: tab1 U tab2
-- Ex-AR.: F1 U F2
-- Em SQL: select * from Tab1 UNION (select * from Tab2);
-- Ex-SQL: 
select * from F1 UNION (select * from F2);
-- Nota. A partir de 92 as linhas repetidas são exibidas uma só vez. Se quisermos ver todas usamos UNION ALL.
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Subtração
-- Def...: Mostra as linhas de uma tabela que não estão em outra tabela (UC);
-- Em AR.: tab1 - tab2
-- Ex-AR.: F1 - F2
-- Em SQL: select * from tab1 MINUS || EXCEPT (select * from tab2);
-- Ex-SQL: 
select * from F1 minus (select * from F2);
-- Nota: Este Operador (embora no padrão desde 87), não é implementado no PostgreSQL, entranto, o PostgreSQL implmenta:
select * from F1 except (select * from F2);
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Intersecção
-- Def...: Exibe as linhas comuns de duas tabelas UC.
-- Em AR.: tab1 ^ tab2
-- Ex-AR.: F1 ^F2
-- Em SQL: select * from tab1 intersect (select * from tab2);
-- Ex-SQL: 
select * from F1 intersect (select * from F2);
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Faltam o comandos de Atualização das Tabelas de um BD.
-- Inclusão de Linhas
-- SQL: INSERT INTO tab [(campos da tabela)] VALUES (lista de valores correspondentes aos campos)[,(),()...];
-- exemplo
insert into cores (idcor,txnomecor,nupantone,dtcadcor) VALUES (14,'yellow',123121,'2022-03-09');
insert into cores VALUES (16,'yellow',123121,'2022-03-09');
insert into cores VALUES (17,'yellow',123121,'2022-03-09'),
                         (18,'yellow',123121,'2022-03-09'),
                         (19,'yellow',123121,'2022-03-09');
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Exclusão de Linhas
-- SQL: DELETE FROM tab [where <condição>];
-- exemplo
delete from cores where idcor>=16;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- Alteração de Linhas
-- SQL: update tab SET <campo1=valor1[,campo2=valor2,campo3=valor3,...,]> [WHERE <condição>];
-- exemplo
update cores set txnomecor='amarelo' where idcor>=16;
-- --------------------------------------------------------------------------------------------------------------------------------------------------
-- 2022-03-16
-- Hoje começamos com as resoluções de perguntas com AR+SQL
-- A base de dados considerada será a já resolvida após a criação das tabelas e ajustes necessários de 
-- campos, chaves primárias e estrangeiras.
-- Neste modelo consideram-se as tabelas: professores, atribuicoes e disciplinas.
-- A tabela atribuicoes implementa o relacionamento com cardinalidade N:M entre professores e disciplinas.
-- para estas tabelas, pergunta-se:

-- Quais são os nomes de professores e os nomes das suas respectivas disciplinas.
-- Quais são os nomes de professores que têm atribuições com TODAS as disciplinas?

-- Respondendo a pergunta 1.
-- Quais são os nomes de professores e os nomes das suas respectivas disciplinas.
-- Em AR
-- junção..: A <- professores [[professores.idprofessor=atribuicoes.professorid]] atribuicoes
-- junção..: B <- A [[A.disciplinaid=disciplinas.iddisciplina]] disciplinas
-- projeção:      B [[idprofessor, txnomeprofessor, iddisciplina, txnome]]
-- EM SQL
-- junção..: A <- professores [[professores.idprofessor=atribuicoes.professorid]] atribuicoes
create temporary table A AS 
       (select * from professores INNER JOIN atribuicoes
                                  ON professores.idprofessor=atribuicoes.professorid);
-- junção..: B <- A [[A.disciplinaid=disciplinas.iddisciplina]] disciplinas
create temporary table B AS 
       (select * from A INNER JOIN disciplinas
                        ON A.disciplinaid=disciplinas.iddisciplina);

-- projeção:      B [[idprofessor, txnomeprofessor, iddisciplina, txnome]]
select idprofessor, txnomeprofessor, iddisciplina, txnome from B
-- Ao invés de escrever estes comandos e GUIAR o processamento do SGBD, o analista pode escrever um comando 
-- SQL que faça o SGBD escolher as rotas de conexão para o conjunto de dados que será mmontado.
select idprofessor, txnomeprofessor, iddisciplina, txnome
       from professores INNER JOIN atribuicoes
                          ON professores.idprofessor=atribuicoes.professorid
                          INNER JOIN disciplinas
                          ON atribuicoes.disciplinaid=disciplinas.iddisciplina
-- ---------------------------------------------------------
-- Agora vamos responder a pergunta:
-- Quais são os nomes de professores que têm atribuições com TODAS as disciplinas?
-- Esta pergunta PRECISA do processamento da Divisão.
-- Nem todos os SGBDs oferecem este operador, portanto a 'divisão' pode ser feita com
-- uma sequencia de operações de AR
/* Procedimento da Divisão
F      PF         P
+--+   +--+--+   +--+
|CF|   |CF|CP|   |CP|
|F1|   |F1| A|   | A|
|F2|   |F1| B|   | B|
|F3|   |F2| A|   | C|
|F4|   |F1| C|   +--+
+- +   |F2| B|
       |F3| A|
       |F3| B|
       |F4| A|
       |F3| C|
       |F4| B|
       +--+--+
-- Quais são os codigos dos 'F' que se ligam com todos os 'P'?
--   S <- F X P -- gera TODAS aspossibilidades de conexão entre F e P
--   W <- S - PF -- Se do 'possivel' for subtraído o REAL, sobra o que NÃO Acontece
--   T <- W[[CF]](distintos) -- 'CFs' que NÃO se conectam com 'CPs'
--   K <- F - T -- Se TODOS os F que existem eu subtrair os que não tem pelo menos
--                 uma conexão com TODOS os P, vai sobrar os 'Fs' que se conectam
--                 com TODOS os 'Ps"
-- portanto, para responder:
-- Quais são os nomes de professores que têm atribuições com TODAS as disciplinas?
-- Temos que executar três FASES:
-- Preparação das tabelas para a divisão
-- F  <- professores [[ idprofessor -> professorid ]]
-- PF <- atribuicoes [[ professorid, disciplinaid ]]
-- P  <- disciplinas [[ iddisciplina -> disciplinaid ]]
-- Execução da Divisão
-- S <- F X P
-- W <- S - PF
-- T <- W [[ professorid ]](distintos)
-- K <- F - T
-- Complemento de operaçõs para responder a pergunta
-- Q <- k [[ k.profewssorid=professores.idprofessor ]] professores
--      Q [[ idprofessor, txnomeprofessor ]]
*/
-- Em SQL
-- F  <- professores[[idprofessor -> professorid]]
create temporary table F AS 
       (select idprofessor as professorid from professores);
-- PF <- atribuicoes[[professorid, disciplinaid]]
create temporary table PF AS 
       (select professorid, disciplinaid from atribuicoes);
-- P  <- disciplinas[[iddisciplina -> disciplinaid]]
create temporary table P AS 
       (select iddisciplina as disciplinaid from disciplinas);
-- Execução da Divisão
-- S <- F X P
create temporary table S AS 
       (select * from F cross join P);
-- W <- S - PF
create temporary table W AS 
       (select * from S except (select * from PF) );
-- T <- W[[professorid]](distintos)
create temporary table T AS 
       (select distinct professorid from W);
-- K <- F - T
create temporary table K AS 
       (select * from F EXCEPT (select * from T)  );
-- Complemento de operaçõs para responder a pergunta
-- Q <- k [[ k.profewssorid=professores.idprofessor ]] professores
create temporary table Q AS 
       ( select * from K INNER JOIN professores ON k.professorid=professores.idprofessor );
--      Q[[idprofessor, txnomeprofessor]]
select idprofessor, txnomeprofessor from Q;
drop table F, PF, P, S, W, T, K, Q;
-- NOTE: A execução dos comandos para responder a estas duas perguntas parte do princípio que a base de dados
--       esteja completamente revisada.
--       Ao tentar escrever os comandos na base ainda sem as alterações indicadas no dicionário de dados que
--       está no site PODE SER que os comandos da segunda pargunta retornem um conjunto sem linhas (vazio).
--       Para processar a divisão e exibir algum resultado as linhas de atribuicoes devm ser alteradas
--       conforme os comandos a seguir.

delete from atribuicoes where professorid in (1,2,3,29);  -- Deletando as atribuições de disciplinas feitas para os professores 1,2,3 e 29;

-- os comandos a seguir atribuem aos professores 1,2,3, e 29 TODAS as disciplinas (para ser visível algum dado na solução da pergunta 2
insert into atribuicoes values (91,1,1,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (92,1,2,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (93,1,3,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (94,1,4,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (95,1,5,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (96,1,6,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (97,1,7,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (98,1,8,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (99,1,9,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (100,1,10,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (101,1,11,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (102,1,12,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (103,1,13,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (104,1,14,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (105,1,15,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (106,1,16,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (107,1,17,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (108,1,18,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (109,1,19,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (110,1,20,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (111,1,21,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (112,1,22,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (113,1,27,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (114,2,1,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (115,2,2,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (116,2,3,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (117,2,4,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (118,2,5,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (119,2,6,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (120,2,7,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (121,2,8,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (122,2,9,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (123,2,10,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (124,2,11,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (125,2,12,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (126,2,13,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (127,2,14,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (128,2,15,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (129,2,16,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (130,2,17,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (131,2,18,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (132,2,19,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (133,2,20,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (134,2,21,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (135,2,22,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (136,2,27,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (137,3,1,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (138,3,2,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (139,3,3,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (140,3,4,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (141,3,5,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (142,3,6,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (143,3,7,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (144,3,8,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (145,3,9,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (146,3,10,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (147,3,11,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (148,3,12,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (149,3,13,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (150,3,14,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (151,3,15,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (152,3,16,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (153,3,17,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (154,3,18,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (155,3,19,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (156,3,20,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (157,3,21,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (158,3,22,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (159,3,27,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (160,29,1,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (161,29,2,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (162,29,3,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (163,29,4,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (164,29,5,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (165,29,6,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (166,29,7,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (167,29,8,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (168,29,9,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (169,29,10,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (170,29,11,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (171,29,12,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (172,29,13,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (173,29,14,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (174,29,15,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (175,29,16,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (176,29,17,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (177,29,18,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (178,29,19,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (179,29,20,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (180,29,21,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (181,29,22,100,'2022-02-01','2022-02-01');
insert into atribuicoes values (182,29,27,100,'2022-02-01','2022-02-01');

-- DEPOIS de ajustar a estrutura das tabelas é possível executar estes comandos de alteração dos dados em
-- atribuicoes e aí sim, executar a sequencia de comandos da segunda pergunta tendo algum resultado visível.
-- 

