-- 2.1 Altere a coluna estado_civil da tabela pacientes para definir ‘S’ como valor
-- padrão
ALTER TABLE pacientes modify estado_civil CHAR(1) DEFAULT 'S';

-- 2.2-Remova o valor padrão que introduziu na alínea anterior.
ALTER TABLE pacientes modify estado_civil CHAR(1);

-- 2.3-Altere a tabela dos seguros para remover a coluna com o estado ativo.
ALTER TABLE seguros
DROP COLUMN ativo;

-- 2.4-Adicione à tabela pacientes uma coluna para introduzir o Número de
-- Identificação de Segurança Social (NISS).
ALTER TABLE pacientes add NISS VARCHAR(20);

-- 2.5-Remova a coluna Número de Identificação de Segurança Social (NISS) da tabela
-- pacientes.
ALTER TABLE pacientes
DROP COLUMN NISS;

-- 4.1-Liste todos os médicos que trabalham no Hospital Portucalense
SELECT DISTINCT
  *
FROM
  medicos m
  INNER JOIN funcionarios f
WHERE
  f.dta_fim IS NULL;

-- 4.2-Liste o nome, o sexo e a data de nascimento dos pacientes do Hospital
-- Portucalense.
SELECT
  nome,
  sexo,
  dta_nascimento
FROM
  pacientes;

-- 4.3-Liste as diferentes localidades dos pacientes do Hospital.
desc pacientes;

SELECT DISTINCT
  localidade
FROM
  pacientes;

-- 4.4- Quais os procedimentos que têm um custo superior a 15€
desc procedimentos;

SELECT
  *
FROM
  procedimentos
WHERE
  preco > '15';

-- 4.5-Liste as consultas onde foram efetuados procedimentos;
desc consultas;

desc examinacoes;

SELECT
  *
FROM
  consultas c
  LEFT JOIN examinacoes e ON e.nr_episodio = c.nr_episodio;

-- 4.6-Liste as consultas que ainda não foram faturadas;
desc consultas;

SELECT
  *
FROM
  consultas
WHERE
  dta_pagamento IS NULL;

-- 4.7-Quais as pacientes do sexo feminino casadas?
desc pacientes;

SELECT
  *
FROM
  pacientes
WHERE
  estado_civil = 'c';

-- 4.8-Liste os pacientes que não possuem seguro de saúde.
desc pacientes;

desc seguros;

SELECT
  *
FROM
  pacientes p
  LEFT JOIN seguros s ON s.nr_apolice = p.nr_apolice;

-- 4.9-Quais são as seguradoras que possuem parceria com o hospital que não estão a
-- cobrir o seguro de saúde de nenhum paciente?
desc seguradoras;

desc seguros;

desc pacientes;

SELECT
  *
FROM
  seguros s
  RIGHT JOIN seguradoras seg ON seg.id_seguradora = s.id_seguradora
  RIGHT JOIN pacientes p ON p.nr_apolice = s.nr_apolice
WHERE
  seg.id_seguradora IS NULL;

-- 4.10-Qual é o nome dos medicamentos que não terminam em ‘ol’ nem em ‘na’?
SELECT
  nome
FROM
  medicamentos
WHERE
  nome NOT LIKE "%ol"
  AND nome NOT LIKE "%na";

-- 4.11-Qual o nome dos procedimentos que possuem um custo entre 20 e 30€?
desc procedimentos;

SELECT
  desc_proc
FROM
  procedimentos
WHERE
  preco > 20
  AND preco < 30;

-- 4.12-Liste as localidades dos pacientes que possuem exatamente 5 caracteres.
desc pacientes;

SELECT DISTINCT
  localidade
FROM
  pacientes
WHERE
  length (localidade) = 5;

-- 4.13-Quais as especialidades que possuem ‘neuro’ no nome?
desc especialidades;

SELECT
  *
FROM
  especialidades
WHERE
  des_especialidade LIKE "%neuro%";

-- 4.14-Quais as especialidades que terminam em ‘logia’?
desc especialidades;

SELECT
  *
FROM
  especialidades
WHERE
  des_especialidade LIKE "%logia";

-- 4.15-Liste os telefones dos pacientes que começam por 253
desc pacientes;

desc telefones_pacientes;

SELECT
  nr_telefone
FROM
  telefones_pacientes
WHERE
  nr_telefone LIKE "253%";

-- 4.16-Liste os administrativos que se chamam ‘João’ ou ‘Pedro’.
desc administrativos;

SELECT
  *
FROM
  administrativos a
  LEFT JOIN funcionarios f ON a.nr_mec = f.nr_mec
WHERE
  f.nome LIKE "%João%"
  OR f.nome LIKE "%Pedro%";

-- 4.17-Liste as prescrições por ordem crescente de validade, isto é, da mais antiga
-- para a mais recente.
desc prescricoes;

SELECT
  *
FROM
  prescricoes
ORDER BY
  data_validade asc;

-- 4.18-Retorne para cada estado de agendamento externo (0 – hospital e 1 – externo)
-- o número total de agendamentos.
desc agendamentos;

SELECT
  externo,
  COUNT(*) AS total
FROM
  agendamentos
GROUP BY
  externo;

-- 4.19-Indique o número total de pacientes para os sexos feminino e masculino.
desc pacientes;

SELECT
  sexo,
  COUNT(sexo) AS total
FROM
  pacientes
WHERE
  sexo <> 'I'
GROUP BY
  sexo;

-- 4.20-Liste os procedimentos que possuem um valor acima da média por ordem
-- decrescente de preço.

desc procedimentos;

select *
from procedimentos p 
where p.preco > (select avg(preco) from procedimentos);

