-- Comandos escritos e processados no encontro do dia 2021-03-05 - Tarde
-- Comandos de CONSULTA
-- --------------------------------------------------------------------------------------------------------------
-- Seleção
SELECT * FROM funcionarios
         where funcionarios.dtnascimento<='1999-12-31' and 
		       (vlsalario+vlbonus) >= 50000;
-- --------------------------------------------------------------------------------------------------------------
-- Projeção
select pkfuncionario, txprenomes, txsobrenome, dtnascimento from funcionarios;
select pkfuncionario, concat(txprenomes,' ', txsobrenome) AS "Nome Completo", dtnascimento from funcionarios;
-- --------------------------------------------------------------------------------------------------------------
-- Produto Cartesiano
-- ANSI:87
select * from cores, cursos;
-- ANSI:92
select * from cores cross join cursos;
-- --------------------------------------------------------------------------------------------------------------
-- Junção natural (fechada)
-- ANSI:87
select * from editoras, livros where editoras.pkeditora=livros.fkeditora;
-- ANSI:92
select * from editoras inner join livros ON editoras.pkeditora=livros.fkeditora;
-- --------------------------------------------------------------------------------------------------------------
-- Junção Aberta pela Direita
-- ANSI:92
select * from medicos right join especialidadesmedicas 
                      ON medicos.fkespecialidade=especialidadesmedicas.pkespecialidade;
-- podemos combinar a JAD com uma projeção, trazendo, medicos e especmedicas de modo resumido.
select pkmedico, txnomemedico, pkespecialidade, txnomeespecialidade 
       from medicos right join especialidadesmedicas 
                    ON medicos.fkespecialidade=especialidadesmedicas.pkespecialidade;
-- --------------------------------------------------------------------------------------------------------------
-- Junção Aberta pela Esquerda
-- ANSI:92
select * from funcoes left join funcionarios on fkfuncao=pkfuncao;
select pkfuncao, txnomefuncao, pkfuncionario, txprenomes from funcoes left join funcionarios on fkfuncao=pkfuncao;
-- --------------------------------------------------------------------------------------------------------------
-- Junção Completa (aberta pela Dir-Esq)
-- ajustando os dados de cidasde parae fazer uma JC com estadosdauniao.
UPDATE cidades SET fkestadodopais=NULL WHERE pkcidade in (15,20,25);
-- ANSI:92
select * from cidades full outer join estadosdauniao on pkestadouniao=fkestadodopais;
select pkcidade, txnomecidade, pkestadouniao, txnome
       from cidades full outer join estadosdauniao
	                on pkestadouniao=fkestadodopais;
-- o comando acima faz uma projeção de uma junção completa
-- --------------------------------------------------------------------------------------------------------------
-- Comandos de ATUALIZAÇÃO
-- --------------------------------------------------------------------------------------------------------------
-- Insert
-- Inclui linhas nas tabelas
-- Sintaxe:
-- INSERT INTO <tabelas> [(lista de campos)] VALUES (valores)[,(),(),()];
INSERT INTO cores (pkcor,txnomecor,nupantone,dtcadcor)
       VALUES (11,'Preto','412452','2021-03-12'),
              (12,'Navajo','42145','2021-03-12'),
              (13,'NavajoWhite','152415','2021-03-12'),
              (14,'Salmão','4452145','2021-03-12'),
              (16,'Verde Claro','1452986','2021-03-12'),
              (17,'Verde Turquesa','2456951','2021-03-12');

-- --------------------------------------------------------------------------------------------------------------
-- Update
-- Sintaxe:
-- UPDATE <TAB> SET <ATRIBUIÇÃO DE VALOR> [WHERE <CONDIÇÃO>];
UPDATE cores SET txnomecor='SkyBlue' WHERE pkcor=10 or pkcor=20;
UPDATE cores SET txnomecor=case when pkcor=10 then 'SkyBlue' 
                                when pkcor=15 then 'SpringGreen'
                                else txnomecor
                           end,
                 dtcadcor=current_date where pkcor in (10,15);
-- No comando acima o CASE...END é um operador condicional.

-- --------------------------------------------------------------------------------------------------------------
-- Delete
-- Sintaxe:
-- DELETE FROM <TAB> [WHERE <CONDIÇÃO>];
DELETE FROM cores WHERE pkcor IN (11,12,13,14,16,17);
-- --------------------------------------------------------------------------------------------------------------
-- Para desenvolvimento da união, subtração e intersecção devemos ter tabelas união compatíveis.
-- Tabelas UC são tabelas com o esquema IDÊNTICO (Campos com mesmo: Nome, tipo de dado, tamanho e ordem na tabela).
-- conjuntos gerados a partir de CORES.
SELECT * FROM public.cores where nupantone <= 60000 order by pkcor;
SELECT * FROM public.cores where nupantone >= 30000 order by pkcor;
-- a partir destes 'conjuntos' vamos criar tabelas
CREATE TEMPORARY TABLE A AS (SELECT * FROM public.cores where nupantone <= 60000 order by pkcor);
CREATE TEMPORARY TABLE B AS (SELECT * FROM public.cores where nupantone >= 30000 order by pkcor);
-- Com  A e B é possível fazer União, Subtração e Intersecção
-- --------------------------------------------------------------------------------------------------------------
-- União
-- Sintaxe:
SELECT * FROM A UNION (SELECT * FROM B); -- EXIBE AS LINHAS sem REPETIÇÃO
SELECT * FROM A UNION all (SELECT * FROM B); -- EXIBE AS LINHAS COM REPETIÇÃO
-- --------------------------------------------------------------------------------------------------------------
-- Subtração
-- Sintaxe:
SELECT * FROM A EXCEPT (SELECT * FROM B);
-- muitos SGBDs usam o operador MINUS, além do EXCEPT
-- --------------------------------------------------------------------------------------------------------------
-- Intersecção
SELECT * FROM A INTERSECT (SELECT * FROM B);
-- --------------------------------------------------------------------------------------------------------------


















