234 lines
4.3 KiB
SQL
234 lines
4.3 KiB
SQL
-- 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);
|
||
|