sql exercícios de revisão
DESCRIPTION
SQL Exercícios de Revisão. Profa. Sandra de Amo Programa de Pós-graduação em Ciência da Computação – UFU 2012 - 2. Exercicio 1. Considere o seguinte esquema de banco de dados: Estudante(Enum, Enome, Curso, Idade, Periodo) Aula(Did, Weekday, Sala, Horário) - PowerPoint PPT PresentationTRANSCRIPT
SQLExercícios de
RevisãoProfa. Sandra de Amo
Programa de Pós-graduação em Ciência da Computação – UFU
2012 - 2
Exercicio 1.
Considere o seguinte esquema de banco de dados:
Estudante(Enum, Enome, Curso, Idade, Periodo)
Aula(Did, Weekday, Sala, Horário)
Disciplina(Did, Dnome, Pid)
Prof(Pid,Pnome,Dept)
Matriculado(Enum,Did)
Dê um comando SQL com um único bloco SQL para a seguinte consulta:
Dar o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia
Exercicio 2.
Dê um comando SQL com DOIS blocos SQL (aninhados) para a mesma consulta do Ex. 1:
Dar o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia
Exercicio 3.
Dê um comando SQL com TRES blocos SQL (aninhados) para a mesma consulta do Ex. 1:
Dar o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia
Exercicio 4.
a) Dê um comando SQL com QUATRO blocos SQL (aninhados) para a mesma consulta do Ex. 1:
Dar o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia
b) Para cada um dos comandos SQL dos Ex. 1, 2, 3, 4 dar o plano de execução (com operadores da álgebra relacional) correspondentes e analise a eficiência de cada comando.
Exercicio 5.
Considere o esquema de banco de dados:Barcos(Bid,Bnome,Color)Reservas(Bid,Sid,Day)Sailors(Sid,Snome,Status,Idade)
a) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando EXISTS para a seguinte consulta:
Encontre nome de marinheiros que reservaram o barco ‘103’
b) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando IN para a mesma consulta do item a)
c) Compare a eficiência dos dois comandos SQL dados.
Exercicio 6.
a) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando NOT EXISTS para a seguinte consulta:
Encontre nome de marinheiros que não reservaram o barco ‘103’
b) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando NOT IN para a mesma consulta do item a)
c) Compare a eficiência dos dois comandos SQL dados.
Exercicio 7.
a) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando UNIQUE para a seguinte consulta, sem utilizar comandos de agregação:
Encontre nome de marinheiros que reservaram uma única vez o barco ‘103’
b) Você poderia dar um comando SQL para a mesma consulta do item (a) sem utilizar o comando UNIQUE ?
Exercicio 8.
a) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando ANY para a seguinte consulta, sem utilizar comandos de agregação:
Encontre os identificadores de marinheiros cujo status é melhor do que algum marinheiro chamado “Horácio”
b) Você poderia dar um comando SQL para a mesma consulta do item (a) sem utilizar o comando ANY ?
Exercicio 9.
a) Dê um comando SQL aninhado usando dois blocos básicos ligados pelo comando ALL para a seguinte consulta, sem utilizar comandos de agregação:
Encontre os identificadores de marinheiros que têm os maiores status.
b) Você poderia dar um comando SQL para a mesma consulta do item (a) sem utilizar o comando ALL ?
Exercício 10.
a) Dê comando SQL para a seguinte consulta, usando dois blocos SQL aninhados, sem comandos de agregação:
Quais são os nomes dos marinheiros mais jovens que reservaram o barco 103 ?
b) Você poderia dar um comando SQL para a mesma consulta do item (a) usando um único bloco SQL (podendo usar agregação) ?
Exercicio 11.
SELECT S.SnomeFROM Sailors SWHERE EXISTS
(SELECT * FROM Reservas R WHERE R.Bid = ‘103`
AND R.Sid = S.Sid)
SELECT S.SnomeFROM SailorsWHERE S.Idade <= ALL (SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid AND R.Bid = 103)
Considere as duas consultas abaixo. Diga quais delas são correlacionadas e por que. Diga também o que cada retorna.
Exercicio 12.O objetivo deste exercicio é dar um comando SQL para retornar os nomes dos marinheiros que reservaram algum barco vermelhor e algum barco verde.
Analise as tres propostas abaixo e diga para cada uma delas se é correta ou
Incorreta justificando sua resposta.
Alternativa 1:
SELECT S.Snome
FROM Sailors S, Reservas R, Barcos B
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’ AND S.Sid IN
(SELECT S2.Sid
FROM Sailors S2, Barcos B2, Reservas R2
WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid
AND B2.Cor = ‘Verde’)
Alternativa 2: SELECT S.SnomeFROM Sailors SWHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) INTERSECT (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Verde’) )
Alternativa 3:
SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’)
INTERSECT
(SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Verde’)
Exercicio 13.O objetivo deste exercicio é dar um comando SQL para retornar os nomes dos marinheiros que reservaram barcos vermelhos e não reservaram barcos verdes.
Analise as tres propostas abaixo e diga para cada uma delas se é correta ou
Incorreta justificando sua resposta.
Alternativa 1:
SELECT S.Snome
FROM Sailors S, Reservas R, Barcos B
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’ AND S.Sid NOT IN
(SELECT S2.Sid
FROM Sailors S2, Barcos B2, Reservas R2
WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid AND B2.Cor = ‘Verde’)
Alternativa 2: SELECT S.SnomeFROM Sailors SWHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) EXCEPT (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Verde’) )
Alternativa 3:
(SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’)
EXCEPT
(SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Verde’)
Exercicio 14.O objetivo deste exercicio é dar um comando SQL para retornar os nomes dos marinheiros que reservaram barcos vermelhos ou verdes.
Analise as duas propostas abaixo e diga para cada uma delas se é correta ou
incorreta justificando sua resposta.
Alternativa 1:
SELECT S.Snome
FROM Sailors S, Reservas R, Barcos B
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’ OR S.Sid IN
(SELECT S2.Sid
FROM Sailors S2, Barcos B2, Reservas R2
WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid AND B2.Cor = ‘Verde’)
Alternativa 2: SELECT S.SnomeFROM Sailors SWHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) UNION (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Verde’) )
Alternativa 3:
(SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Vermelho’)
UNION
(SELECT S.Snome
FROM Sailors S, Barcos B, Reservas R
WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND
B.Cor = ‘Verde’)
Exercicio 15.a) Analise a seguinte consulta SQL e diga o que ela retorna.
SELECT S.SNOME
FROM SAILORS S
WHERE NOT EXISTS
( ( SELECT B.BID
FROM BARCOS B
EXCEPT
(SELECT R.BID
FROM RESERVAS R
WHERE R.SID = S.SID) )
b) Esta consulta é correlacionada ?
Exercicio 16.a) Analise a seguinte consulta SQL e diga o que ela retorna.
SELECT S.SNOMEFROM SAILORS SWHERE NOT EXISTS
(( SELECT B.BID FROM BARCOS B WHERE NOT EXISTS ( SELECT R.BID FROM RESERVAS R WHERE R.BID = B.BID AND R.SID = S.SID) ) b) Esta consulta é correlacionada ?
Exercício 17
Dê comando SQL para a seguinte consulta:
Encontrar os nomes dos barcos que foram reservados por todos os marinheiros com idade igual a 20 anos.