-- Este simbolo é um comentário em SQL.
-- Veremos os comandos de 'Atualização', na forma:
-- Sintaxe
-- Exemplo prático
-- Variações do comando
-- --------------------------------------------------------------------------------------
-- Inclusão
--   Sintaxe
--   insert into <tab>
--                   [(lista de campos de tab)]
--               values (lista de valores)[,
--                      (lista de valores)];
--   Exemplo prático
insert into pacientes (cppaciente,dtcadpaciente,dtnascpaciente,txnomepaciente)
            values ('1','2024-08-16','1998-04-15','José Felisberto de Athaide'),
                   ('2','2024-08-16','1998-10-05','Ana Maria De Alburque Lins');
--   Variações do comando
-- Eliminando a lista de campos depois do nome da tabela
insert into pacientes
            values ('3','2024-08-16','1998-04-15','José Felisberto de Athaide'),
                   ('4','2024-08-16','1998-10-05','Ana Maria De Alburque Lins');
-- Este comando vai apresentar o seguinte erro:
--  invalid input syntax for type date: "José Felisberto de Athaide"
--  LINE 2:             values ('3','2024-08-16','1998-04-15','José Feli...
--  SQL state: 22007
--  Character: 73
-- corrigindo o comando anterior
insert into pacientes
            values ('3','José Felisberto de Athaide','1998-04-15','2024-08-16'),
                   ('4','Ana Maria De Alburque Lins','1998-10-05','2024-08-16');
-- --------------------------------------------------------------------------------------
-- Alteração
--  Sintaxe:
--  update <tab> SET <atribuições> [where <condição>];
--  Exemplo prático
update pacientes
       set txnomepaciente='Luiz de Souza',
           dtnascpaciente='1997-03-10'
       where cppaciente=3 and txnomepaciente like '%Ana%';
--  Variações do comando
--   Escrevendo o comando 'dentro' de uma transação
-- INICIANDO uma transação
BEGIN TRANSACTION;
-- Executando o comando de alteração
update pacientes set txnomepaciente='José Felisberto de Athaide' where pacientes.cppaciente='3';
-- Analisando o resultado do comando
select * from pacientes;
-- Cancelando a transação
ROLLBACK;
-- Concluindo a transação
COMMIT;
-- --------------------------------------------------------------------------------------
-- Exclusão
--  Sintaxe:
-- delete from <tab> [where <condição>];
--  Exemplo prático
--  Sintaxe:
--  Exemplo prático
select * from pacientes;
BEGIN TRANSACTION;
delete from pacientes where dtnascpaciente between '1998-10-01' and '1998-10-31';
delete from pacientes;
ROLLBACK;
COMMIT; -- este comando grava a operação 'aberta' na transação
-- --------------------------------------------------------------------------------------------------------------------
-- Seguimos em sala montando alguns comandos para gerar dados em algumas tabelas e exemplificar outras operações da AR
-- --------------------------------------------------------------------------------------------------------------------
-- Verificando os dados da tabela clientes
select * from clientes;
-- Nota: o comando acima é uma SELEÇÃO. O sub-comando (ou cláusula) WHERE foi omitida, portanto o interpretador do SQL
-- assume WHERE 1=1, retornando VERDADEIRO para todas as linhas da tabela (de qualquer tabela).
-- Foi decidido que criaremos duas linhas na tabela pacientes; assim:
insert into clientes VALUES (1,'florisvaldo de athaide santos',1,'2024-08-22');
insert into clientes VALUES (2,'lisbela de athaide santos',1,'2024-08-22');
-- Consultando a tabela logradouros
select * from logradouros;
-- gerando duas linhas na tabela logradouros; assim:
insert into logradouros values (2,'rua rangel pestana','2024-08-22');
insert into logradouros values (1,'avenida paulista','2024-08-22');
-- Executando o produto Cartesiano (emparelhamento de cada linha de uma tabela com todas as linhas de outra tabela
select * from clientes, pacientes;
-- O SQL tem padrões que foram homologados pelo ANSI. A notação acima foi publicada em 87.
-- Em 92 o padrão ANSI apresentou o operador JOIN e a sintaxe para o Produto Cartesiano passou a ser:
-- select <tab1> CROSS JOIN <tab2>;
-- Então o comando anterior pode ser reescrito na forma:
select * from clientes CROSS JOIN pacientes;
-- Nota: O padrão ANSI:92 não anula o padrão ANSI:87. Os SGBDs que 'entendem' o ANSI:92
-- também aceitam a sintaxe ANSI:87.
-- Executando agora a junção Natural (emparelhando linhas de tabelas comparando os valores de algum campo comum - 
-- em geral o 'campo comum' é a chave primária em uma tabela comparado com a chave estrangeira presente em outra
-- tabela).
-- na sintaxe ANSI:87
select * from clientes, logradouros where clientes.celogradouro=logradouros.cplogradouro;
-- na sintaxe ANSI:92
select * from clientes inner join logradouros on clientes.celogradouro=logradouros.cplogradouro;
-- Analisando os registros emparelhados ainda fizemos o comando de alteração para melhorar a visualização
-- do emparelhamento dos dados de clientes e logradouros.
update clientes set celogradouro=2 where cpcliente=2;
-- Depois de executado a alteração execute a junção natural e analise as linhas emparelhadas.
