18
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

SQL Exercícios de Revisão

  • Upload
    olathe

  • View
    66

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: SQL Exercícios de Revisão

SQLExercícios de

RevisãoProfa. Sandra de Amo

Programa de Pós-graduação em Ciência da Computação – UFU

2012 - 2

Page 2: SQL Exercícios de Revisão

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

Page 3: SQL Exercícios de Revisão

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

Page 4: SQL Exercícios de Revisão

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

Page 5: SQL Exercícios de Revisão

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.

Page 6: SQL Exercícios de Revisão

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.

Page 7: SQL Exercícios de Revisão

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.

Page 8: SQL Exercícios de Revisão

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 ?

Page 9: SQL Exercícios de Revisão

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 ?

Page 10: SQL Exercícios de Revisão

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 ?

Page 11: SQL Exercícios de Revisão

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

Page 12: SQL Exercícios de Revisã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.

Page 13: SQL Exercícios de Revisão

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

Page 14: SQL Exercícios de Revisão

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

Page 15: SQL Exercícios de Revisão

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

Page 16: SQL Exercícios de Revisão

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 ?

Page 17: SQL Exercícios de Revisão

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 ?

Page 18: SQL Exercícios de Revisão

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.