Você está na página 1de 8

Faculdade de Tecnologia Rubens Lara

Curso de Tecnologia em Análise e Desenvolvimento de Sistemas

Banco de Dados
Lista - SQL
Prof. Jorge Luiz Chiara
Considere as seguintes tabelas:

BD Bancario
create table cliente (
cliente_nome char(20) not null,
rua char(30),
cidade char(30,
primary key (cliente_nome)
);

create table agência (


agencia_nome char(15) not null,
ativos integer,
cidade char(30),
primary key (agencia_nome)
);

create table depósito (


agencia_nome char(15) not null,
conta_numero char(10),
cliente_nome char(20) not null,
saldo integer,
primary key (conta_numero, cliente_nome)
foreign key (agencia_nome) references agencia,
foreign key (cliente_nome) references cliente)
);

Considere os seguintes Esquemas de BD:


a) BD hospitalar
Medicos (codm, nomem, idade, especialidade)
Pacientes (codp, nomep, idade, problema)
Consultas (codm, codp, data, hora)
Codm referencia Medicos
Codp referencia Pacientes
b) Zoologico:
Animais (codA, tipo, nome, peso, idade)
Jaulas (nro, area)
Alocação (nro_jaula, codA, data_entrada)
Nro_jaula referencia Jaulas
CodA referencia Animais
Zeladores (codZ, nomez, tempo_serviço)
Manutencao (codZ, nro, horas)
CodZ referencia Zeladores
Exercício 1: Consultar no BD hospitalar:
a) O nome dos médicos com idade > 22 ou com especialidade diferente
de traumatologia;
select nomem
from Medicos
where idade > 22 and especilidade != "traumatologia"

b) O nome e o problema dos pacientes com menos de 24 anos;


select nomep, problema
from Pacientes
where idade < 24

c) As consultas para o dia 26/09/2010 após as 15hs.


select *
from Consultas
where data = "26/09/2010" and hora > 15

d) Buscar todas as especialidades dos médicos;


select distinct(especialidade)
from Medicos

e) Buscar todas as datas de consultas com horário após as 15hs


select data
from Consultas
where hora > 15

f) Buscar todas as idades dos médicos


select nomem,idade
from Medicos

Exercício 2: Funções agregadas:


a) Quantas consultas para o dia 26/05/2010 existem?
select count(*)
from Consultas
where data="26/05/2010"

b) Soma dos saldos dos clientes da agência Ag1.


select sum(saldo)
from depósito
where agencia_nome="Ag1"

c) Obter média de idade dos médicos ortopedistas.


select avg(idade)
from Medicos
where especialidade="ortopedistas"

d) Maior e menor saldo de contas em depósito.


select max(saldo), min(saldo)
from depósito

Exercício 3: Cláusula like


a) Buscar o nome de todos os pacientes que começam com a letra C.
select nomep
from Pacientes
where nomep like 'C%'
b) Buscar o código do médico, paciente e horário para todas as consultas
marcadas para o ano de 2008
select codm, codp, hora
from Consultas
where data like '%2008'

Exercício 4: Comparação com NULL

a) buscar dados dos médicos que não têm especialidade.


select *
from Medicos
where especialidade is null

Exercício 5: Cláusulas Union, Intersection e Minus


a) Buscar o nome de todas as pessoas cadastradas no hospital.
select nomem
from Mediscos
union
select nomep
from Pacientes

b) Buscar todos os clientes da Ag1 que possuem uma conta e empréstimo.


select *
from cliente
inner join depósito on c.cliente_nome = d.cliente_nome
having d.agencia_nome='Ag1'

Exercício 6: Junção (utilize as cláusulas Where e Inner join para cada caso)

a) Mostrar os dias de consultas do médico Joao.


select *
from Consultas
inner join Medicos on C.codm=M.codm
having M.nomem = "Joao"

b) Buscar o nome dos médicos com consulta marcada para o dia 22/05/2010.
select M.nomem
from Medicos
inner join Consultas on M.codm=C.codm
having C.data = "22/05/2010"

Exercício 7: Cláusulas [NOT] In, Any, All, [NOT] Exists, Contains


a) Buscar nome de todos os pacientes sem consulta marcada.
select *
from Pacientes
inner join Consultas on P.cdop=C.cdop
where C.data < SELECT CONVERT (date, SYSDATETIME())

b) Buscar nome e problema dos pacientes com idade > 21 e que também
são médicos.
select P.nomep, problemas
from Pacientes
inner join Medicos on P.nomep=M.nomem
c) Buscar todos os clientes da Ag1 que possuem conta e empréstimo.
Emprestismos?????

d) Buscar todos os clientes da Ag2 que possuem conta mas não possuem
empréstimo.
Emprestismos?????

e) Buscar o nome de todos os pacientes, exceto o mais idoso.


select *
from Pacientes
where idade < ( select max(idade) from Paciente)

f) Buscar o nome e a idade do médico mais jovem.


select nomem, idade
from Medicos
where idade = ( select min(idade) from Medicos)

g) Buscar o nome dos clientes que tem saldo menor que todos os clientes
com depósto na agência Ag3.
select cliente_nome
from depósitos
where agencia_nome != 'Ag3' and saldo < select min(saldo) from
depósitos)

h) Buscar o nome dos médicos com consultas marcadas para horários mais
tarde que todas as consultas da médica Maria
Select nomem
From Medicos
Inner join Consultas on M.codm=C.codm
Where C.hora > (select max(hora) from Consultas inner join Medicos
On C.codm=M.codm)

i) Buscar os dados dos pacientes com consultas marcadas para horários


anteriores a todos os horários marcados para o dia 22/06/2011.
Select *
From Pacientes
Inner join Consultas on P.codp=C.codp
Where C.hora<”22/06/2011”

j) Encontre os clientes que possuem conta e empréstimo na Ag1.


Emprestismos?????

k) Buscar o nome de todos os médicos com consulta marcada.


Select distinct(M.nomem)
From Medicos
Inner Join Consultas on M.codm=C.codm
Where C.data> SELECT CONVERT (date, SYSDATETIME())

l) Buscar o nome do médico mais jovem.


Select nomem
From Medicos
Where idade = (select min(idade) from Medicos)
m) Encontre todos os clientes que têm uma conta em todas as agências
localizadas em “StaCruz”. (usando not exists e minus)/Contains
Select *
From cliente
Inner join agência on c.cliente_nome=a.cliente_nome
Where a.agencia_nome=”StaCruz”

Exercício 8: Cláusula Order by


a) Buscar os nomes dos clientes em ordem alfabética com empréstimo na
agência “Ag3".
Emprestismos?????

b) Listar todos os empréstimos na ordem decrescente de quantia e os


empréstimos com a mesma quantia devem ser ordenados pelo número do
empréstimo.
Emprestismos?????

c) Buscar os dados de todas as consultas do paciente Carlos, ordenadas de


forma decrescente pela hora da consulta.
Select *
From Consulta
Inner join Pacientes on C.codp=P.codp
Where P.nomep=”Carlos”
Order by C.hora desc

Exercício 9: Grup by/Having

a) Encontre o saldo médio de conta em cada agência.


Select avg(saldo)
From depósito
Group by agencia_nome

b) Encontre o número de depositantes de cada agência.


Select count(cliente_nome)
From depósito
Group by agencia_nome

c) Buscar as agências nas quais a média dos saldos é maior do que 1200
Select agencia_nome
From depósito
Where saldo = (select avg(saldo) from depósito where saldo > 1200)

d) Obter as agências com maior média de saldos.


Select agencia_nome
From depósito
Where saldo >
( select max(saldo) from depósito where saldo > (select Avg(saldo) from
depósitos group by agencia_nome) )

Exercício 10: Comandos de atualização com comandos de consulta

a) Remover todas as contas em agências localizadas em Canoas


Delete from agência
where agencia_nome="Canoas"
b) Remover todas as consultas do médico “João”.
Delete from Consulta
Inner join Medicos on C.codm=M.codm
where nomem="João"

Mais Exercícios
a) Mostrar todos os dados da tabela de consultas.
select *
from Consultas

b) Mostrar os dados dos médicos classificados por ordem de código


select *
from Medicos
order by codm

c) Obter os nomes e códigos de todos os médicos cirurgiões.


select nomem, codm
from Medicos
where especialidade = "cirurgiões"

d) Fornecer os nomes e códigos de todos os médicos e seus


respectivos dias de consulta.
Select M.nomem, M.codm, C.data
From Medicos
Inner join Consultas on M.codm=C.codm

e) Fornecer os nomes dos médicos que possuem alguma consulta


marcada com o paciente P4.
Select nomem
From Medicos
Inner join Consulta on M.codm=C.codm
where C.codp='P4'

f) Mostrar os nomes dos médicos que não têm consulta marcada com
a paciente P4.
Select nomem
From Medicos
Inner join Consulta on M.codm=C.codm
where C.codp!='P4'

g) Mostrar os nomes dos médicos que não tem consulta marcada com
a paciente Maria.

Select nomem
From Medicos
Inner join ( Consulta inner join Pacientes on C.codp = P.codp)
on M.codm =C.codm
where P.nomep != 'Maria'

h) Mostrar o código dos pacientes que tem consulta marcada para o


dia 23/09/96 ou com médicos pediatras.
Select codp
From Pacientes
Inner join ( Consulta inner join Medicos C.codm=M.codm)
on P.codp=C.codp
where C.data="23/09/96" or M.especialidade='pediatra'

Considere o BD formado pelas seguintes tabelas:


Empregado (codemp, salário, funcao, coddepto)
Codemp referencia Departamento
Departamento (coddepto, cidade, nome)
Joga (codemp, codtime, posição)
Codemp referencia Empregado
Codtime referencia Time
Time (codtime, nome, endereco)

a) Mostrar os códigos dos empregados que ganham acima da média


dos salaries.
select codemp
from Empregado
where salário > (select avg(salário) from Empregado)

b) Mostrar os departamentos que não tem empregados.


select *
from Departamento
left inner join Empregados on D.coddepto=E.coddepto
where E.coddepto is null

c) Mostrar os departamentos com média salarial inferior a 500.


select *
from Departamento
inner join Empregado on D.coddepto=E.coddepto
where salario < (select avg(salario ) from Empregado group by
coddepto)

Você também pode gostar