biblioteca_fc/ficha1.sql

234 lines
4.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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);