Sei sulla pagina 1di 6

Instituto Federal de Educao, Cincia e Cultura da Bahia

Curso Superior de Tecnologia em Anlise de Sistemas


Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

1
Aluno: __________________________________________________________________

PROVA 20 06/09/2013

PARTE 1 AQUECIMENTO QUESTES DE CONCURSO

1. Valor: 1,0 (Hum ponto) - (ESAEX 2012) Considere a tabela A abaixo, seus
campos CLIENTE e VALOR, e a consulta em linguagem SQL:

A
CLIENTE VALOR
1 4
1 2
2 3
2 4
2 5
3 6
3 8



SELECT MAX(A.VALOR)
FROM A
GROUP BY A.CLIENTE
HAVING COUNT (*) < 3 AND AVG (A.VALOR) < 7
Teremos como retorno da consulta SQL:

(A) 4 e 2
(B) 6 e 8
(C) 8
(D) 4
(E) 3, 4 e 5

2. Valor: 1,0 (Hum ponto) - (ESAEX 2010) Considere as tabelas A e B e a consulta
SQL abaixo:

A
CODIGO VALOR
1 2
2 3
4 4
5 5
B
CODIGO VALOR
1 1
1 2
2 3
2 4
3 5
SELECT SUM (A.VALOR)
FROM A
WHERE A.CODIGO IN
(SELECT B.CODIGO FROM B)
OR EXISTS
(SELECT * FROM B
WHERE B.VALOR = A.VALOR)
Teremos como retorno da consulta SQL o nmero:
A) 0
B) 5
C) 7
D) 14
E) 21

Instituto Federal de Educao, Cincia e Cultura da Bahia
Curso Superior de Tecnologia em Anlise de Sistemas
Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

2
PARTE 2 SE DIVERTINDO COM SQL

3. Valor: 1 (hum) pontos. Com base no esquema da figura e nas especificaes
abaixo crie a estrutura do esquema de banco de dados. Todos os campos OID so as
chaves primarias das tabelas. Todos os relacionamentos devem possuir integridade
referencial.



4. Valor 1 (hum) ponto. Crie os inserts para os seguintes registros:

TABELA: CLIENTE
COD_CLIENTE NOME_CLIENTE
1 BARNEY
2 FRED
3 TOM
4 JERRY

TABELA: ARTIGO
COD_ARTIGO NOME_ARTIGO VALOR
1 ARROZ 4
2 FEIJAO 6
3 FARINHA 3
4 LEITE 3
5 CAF 4

TABELA: PEDIDO
COD_PEDIDO COD_CLIENTE DATA_PEDIDO
1 1 2013-05-01
2 1 2013-06-20
3 2 2013-02-01
4 3 2013-05-15
5 3 2013-08-20
6 3 2013-07-14

Instituto Federal de Educao, Cincia e Cultura da Bahia
Curso Superior de Tecnologia em Anlise de Sistemas
Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

3

TABELA: LISTA
COD_PEDIDO COD_ARTIGO QUANTIDADE
1 1 2
1 2 1
2 3 5
3 5 1
3 1 2
4 2 4
5 4 1
6 4 3

5. Valor 6 (seis) pontos. Construa as consultas a seguir:

a) Faa uma alterao na tabela ARTIGO incrementado em 1 UNIDADE o VALOR de
seus itens.
b) Selecione o nome dos CLIENTES e o total gasto em cada PEDIDO.
c) Selecione a lista de ARTIGOS e sua quantidade vendida.
d) Selecione o CLIENTE que no fez PEDIDOS cujos ARTIGOS tenham a letra F e
no tenham sido vendidos no ms de maio de 2013.
e) Selecione os ARTIGOS mais vendidos nos meses de maio a julho de 2013.
f) Apague da LISTA a linha cujo PEDIDO e ARTIGO tenha vendido menos que 20
reais.

SCRIPT

create table cliente(
cod_cliente int not null primary key,
nome_cliente varchar(30) not null
);

create table pedido(
cod_pedido int not null primary key,
cod_cliente int not null,
data_pedido date not null,
constraint cod_cliente_fk foreign key (cod_cliente) references cliente
);

create table artigo(
cod_artigo int not null primary key,
nome_artigo varchar(30),
valor int
);

create table lista(
cod_pedido int not null,
cod_artigo int not null,

Instituto Federal de Educao, Cincia e Cultura da Bahia
Curso Superior de Tecnologia em Anlise de Sistemas
Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

4
quantidade int not null,
primary key (cod_pedido, cod_artigo),
constraint cod_pedido_fk foreign key (cod_pedido) references pedido,
constraint cod_artigo_fk foreign key (cod_artigo) references artigo
);

--INSERTS

insert into cliente values (1, 'BARNEY'), (2, 'FRED'), (3, 'TOM'), (4, 'JERRY');

insert into artigo values (1, 'ARROZ', 4), (2, 'FEIJAO', 6), (3, 'FARINHA', 3), (4, 'LEITE',
3), (5, 'CAFE', 4);

insert into pedido values (1, 1, '2013-05-01'), (2, 1, '2013-06-20'), (3, 2, '2013-02-01'), (4,
3, '2013-05-15'),
(5, 3, '2013-08-20'), (6, 3, '2013-07-14');

insert into lista values (1, 1, 2), (1, 2, 1), (2, 3, 5), (3, 5, 1), (3, 1, 2), (4, 2, 4), (5, 4, 1), (6,
4, 3);

--CONSULTAS
select * from artigo
--A

update artigo
set valor = valor + 1;


--B
select c.nome_cliente, p.cod_pedido, sum (a.valor * l.quantidade) as valor_gasto
from cliente as c inner join pedido as p
on (c.cod_cliente = p.cod_cliente)
inner join lista as l on (p.cod_pedido = l.cod_pedido)
inner join artigo as a on (l.cod_artigo = a.cod_artigo)
group by c.nome_cliente, p.cod_pedido
order by c.nome_cliente, p.cod_pedido

--C
select a.nome_artigo, SUM(l.quantidade)
from artigo as a inner join lista as l
on (a.cod_artigo = l.cod_artigo)
inner join pedido as p
on (l.cod_pedido = p.cod_pedido)
group by a.nome_artigo;

--D

Instituto Federal de Educao, Cincia e Cultura da Bahia
Curso Superior de Tecnologia em Anlise de Sistemas
Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

5
select cl.nome_cliente
from cliente as cl
where cl.nome_cliente not in
(
select c.nome_cliente
from cliente as c inner join pedido as p
on (c.cod_cliente = p.cod_cliente)
inner join lista as l
on (p.cod_pedido = l.cod_pedido)
inner join artigo as a
on (l.cod_artigo = a.cod_artigo)
where a.nome_artigo like '%F%'
and p.data_pedido not between '2013-05-01' and '2013-05-31'
)

/* OU */

select cl.nome_cliente
from cliente as cl
where not exists
(
select c.nome_cliente
from cliente as c inner join pedido as p
on (c.cod_cliente = p.cod_cliente)
inner join lista as l
on (p.cod_pedido = l.cod_pedido)
inner join artigo as a
on (l.cod_artigo = a.cod_artigo)
where a.nome_artigo like '%F%'
and p.data_pedido not between '2013-05-01' and '2013-05-31'
and cl.nome_cliente = c.nome_cliente
)

--E

select a.nome_artigo
from artigo as a inner join lista as l
on (a.cod_artigo = l.cod_artigo)
inner join pedido as p
on (p.cod_pedido = l.cod_pedido)
where p.data_pedido between '2013-05-01' and '2013-07-31'
group by a.nome_artigo
having MAX(l.quantidade) in (
select MAX(l.quantidade)
from artigo as a inner join lista as l
on (a.cod_artigo = l.cod_artigo)

Instituto Federal de Educao, Cincia e Cultura da Bahia
Curso Superior de Tecnologia em Anlise de Sistemas
Disciplina: Banco de Dados I
Prof. Grinaldo Lopes de Oliveira

6
inner join pedido as p
on (p.cod_pedido = l.cod_pedido)
where p.data_pedido between '2013-05-01' and '2013-07-31'
group by a.nome_artigo
order by MAX desc limit 1)

--F
begin transaction
delete from lista as ln where exists(
select * from lista as l inner join pedido as p
on (p.cod_pedido = l.cod_pedido)
inner join artigo as a
on (a.cod_artigo = l.cod_artigo)
where ln.cod_pedido = l.cod_pedido and ln.cod_artigo = l.cod_artigo
group by l.cod_pedido, l.cod_artigo, p.cod_pedido, a.cod_artigo
having (a.valor * l.quantidade) < 20
)
rollback

Potrebbero piacerti anche