biblioteca_fc/ficha1.sql

235 lines
4.3 KiB
MySQL
Raw Normal View History

2023-06-05 22:30:05 +01:00
-- 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);