SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management...
Transcript of SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management...
![Page 1: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/1.jpg)
SQL – Consultas Aninhadas
Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke
![Page 2: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/2.jpg)
Exercícios
Variantes da consulta “Dê o nome dos marinheiros que reservaram barcos vermelhos”
Variantes equivalentes da consulta “Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”
![Page 3: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/3.jpg)
Dê os nomes dos marinheiros que reservaram barcos vermelhos SELECT S.SnomeFROM Sailors SWHERE S.Sid IN
(SELECT R.Sid FROM Reservas R WHERE R.Bid IN
(SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’))
Sailors
Reservas
Sid Snome Status Idade22293132586471748595
N1N2N3N4N5N6N7N6N8N9
7188107
10933
453355,525,53535163525,563,5
Sid Bid Dia222222223131 31
74
64
101102103104102103
101
102
D1D1D3D4D5
64
104
103
D6D7D8
D9
D9
Bid BN Cor
Barcos
101102
103
104
A1
A1
A2
A3
Verm
VermVerde
Azul102
104
22
313122
64
N1
N3
N6
Resposta
![Page 4: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/4.jpg)
Dê os nomes dos marinheiros que NÃO reservaram barcos vermelhos
SELECT S.SnomeFROM Sailors SWHERE S.Sid NOT IN
(SELECT R.Sid FROM Reservas R WHERE R.Bid IN
(SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’))
Sailors
Reservas
Sid SnomeStatus Idade22293132586471748595
N1N2N3N4N5N6N7N6N8N9
718810710933
453355,525,535351635
25,563,5
Sid Bid Dia
222222223131 31
74
64
101102103104102103
101
102
D1D1D3D4D5
64
104
103
D6D7
D8
D9
D9
Bid BN Cor
Barcos
101102
103
104
A1A1
A2A3
Verm
VermVerde
Azul102
104
22
313122
64
N2N4
N7
Resposta
N5
N8N9
N6
![Page 5: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/5.jpg)
Dê os nomes dos marinheiros que reservaram barcos não vermelhos SELECT S.SnomeFROM Sailors SWHERE S.Sid IN
(SELECT R.Sid FROM Reservas R WHERE R.Bid NOT IN
(SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’))
Sailors
Reservas
Sid SnomeStatus Idade
22293132586471748595
N1N2N3N4N5N6N7N6N8N9
7188
107
10933
453355,525,53535163525,563,5
Sid Bid Dia
222222223131 31
74
64
101102103104102103
101
102
D1D1D3D4D5
64
104
103
D6D7
D8
D9D9
Bid BN Cor
Barcos
101
102
103104
A1
A1
A2
A3
Verm
VermVerde
Azul102
104
22
3122
64
N1N3N6
Resposta
74
N6
![Page 6: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/6.jpg)
Dê os nomes dos marinheiros que não reservaram barcos não vermelhosSELECT S.SnomeFROM Sailors SWHERE S.Sid NOT IN
(SELECT R.Sid FROM Reservas R WHERE R.Bid NOT IN
(SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’))
102
104
22
3122
64
N2N4N5
Resposta
74
N7N8N9
Sailors
Reservas
Sid SnomeStatus Idade
22293132586471748595
N1N2N3N4N5N6N7N6N8N9
7188
107
10933
453355,525,53535163525,563,5
Sid Bid Dia
222222223131 31
74
64
101102103104102103
101
102
D1D1D3D4D5
64
104
103
D6D7
D8
D9D9
Bid BN Cor
Barcos
101
102
103104
A1
A1
A2
A3
Verm
VermVerde
Azul
![Page 7: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/7.jpg)
Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”VARIANTE 1 : Sem subconsultas aninhadas
SELECT E.ENOME
FROM ESTUDANTE E, MATRICULADO M, DISCIPLINA D, PROF P
WHERE E.PERIODO = ‘1’ AND E.ENUM = M.ENUM AND
M.DID = D.DID AND D.PID = P.PID AND
P.PNOME = ‘Maria Amélia’
![Page 8: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/8.jpg)
Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”VARIANTE 2 : com um nível de aninhamento
SELECT E.ENOME
FROM ESTUDANTE
WHERE E.PERIODO = ‘1’ AND
E.NUM IN
(SELECT M.ENUM
FROM MATRICULADO M, DISCIPLINA D, PROF P
WHERE M.DID = D.DID AND D.PID = P.PID AND
P.PNOME = ‘Maria Amélia’)
![Page 9: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/9.jpg)
Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”VARIANTE 3 : com dois níveis de aninhamento
SELECT E.ENOME FROM ESTUDANTEWHERE E.PERIODO = ‘1’ ANDE.NUM IN (SELECT M.ENUM FROM MATRICULADO M WHERE M.DID IN (SELECT D.DID FROM DISCIPLINA D, PROF P WHERE D.PID = P.PID AND P.PNOME = ‘Maria Amélia’))
![Page 10: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/10.jpg)
Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”VARIANTE 4 : com três níveis de aninhamento
SELECT E.ENOME FROM ESTUDANTEWHERE E.PERIODO = ‘1’ ANDE.NUM IN (SELECT M.ENUM FROM MATRICULADO M WHERE M.DID IN (SELECT D.DID FROM DISCIPLINA D WHERE D.PID IN (SELECT P.PID FROM PROF P WHERE P.PNOME = ‘Maria Amélia’)))
![Page 11: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/11.jpg)
Condições do WHERE – em consultas aninhadas A IN (R: Resultado de subconsulta)
Verdadeiro se o valor do atributo A está em R A NOT IN (R: Resultado de subconsulta)
Verdadeiro se o valor do atributo A não está em R EXISTS (R: Resultado de subconsulta)
Verdadeiro se R é não vazio NOT EXISTS (R: Resultado de subconsulta)
Verdadeiro se R é vazio
![Page 12: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/12.jpg)
Exemplo
Encontre nome de marinheiros que reservaram o barco ‘103’
SELECT S.SnomeFROM Sailors SWHERE EXISTS
(SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)
![Page 13: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/13.jpg)
Exemplo
Encontre nome de marinheiros que não reservaram o barco ‘103’
SELECT S.SnomeFROM Sailors SWHERE NOT EXISTS
(SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)
![Page 14: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/14.jpg)
Exemplo
Encontre nome de marinheiros que reservaram uma única vez o barco ‘103’
SELECT S.SnomeFROM Sailors SWHERE UNIQUE
(SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)
![Page 15: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/15.jpg)
Condições do WHERE – em consultas aninhadas A > ANY (R: Resultado de subconsulta)
Verdadeiro se o valor do atributo A é maior do que algum valor de R
A > ALL (R: Resultado de subconsulta) Verdadeiro se o valor do atributo A é maior do
que qualquer valor em R A <> ALL (R: Resultado de subconsulta)
Verdadeiro se o valor de A não está em R A = ANY (R: Resultado de subconsulta)
Verdadeiro se o valor de A está em R
![Page 16: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/16.jpg)
Exemplo Encontre os identificadores de marinheiros cujo
status é melhor do que algum marinheiro chamado “Horácio”
SELECT S.SidFROM Sailors SWHERE S.Status >= ANY
(SELECT S2.Status FROM Sailors S2 WHERE S2.Snome =
‘Horacio’)
![Page 17: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/17.jpg)
Exemplo Encontre os identificadores de marinheiros
que têm os maiores status.
SELECT S.Sid
FROM Sailors S
WHERE S.Status >= ALL
(SELECT S2.Status
FROM Sailors S2)
![Page 18: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/18.jpg)
Exercício 1
Quais são os nomes dos marinheiros mais jovens que reservaram o barco 103 ?
SELECT S.SnomeFROM SailorsWHERE S.Idade <= ALL
(SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid
AND R.Bid = 103)
![Page 19: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/19.jpg)
Consultas Aninhadas Correlacionadas (a evitar - ineficientes) Encontre nome de marinheiros que reservaram
o barco ‘103’
SELECT S.SnomeFROM Sailors SWHERE EXISTS
(SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)
Consulta executada repetidamente: uma vez para cada tuplada relação Sailors
![Page 20: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/20.jpg)
Exercício 2
A consulta a seguir é correlacionada ?
SELECT S.SnomeFROM SailorsWHERE S.Idade <= ALL
(SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid
AND R.Bid = 103)
Resposta: Não
![Page 21: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/21.jpg)
Como simular operador de IntersecçãoEncontre os nomes de marinheiros que reservaram barcos
verdes e vermelhos.
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’)
![Page 22: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/22.jpg)
Variante: calcula a mesma resposta ? (SIM)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’) )
![Page 23: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/23.jpg)
Variante: calcula a mesma resposta ? (NÃO !!)(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 24: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/24.jpg)
Exercício 3 : Operador de Diferença Dê os nomes dos marinheiros que reservaram
barcos vermelhos e não reservaram barcos verdes.
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’)
![Page 25: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/25.jpg)
Variante: Calcula a mesma resposta ? (SIM)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’) )
![Page 26: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/26.jpg)
Variante: calcula a mesma resposta ? (NÃO !!)(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 27: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/27.jpg)
Exercicio 4 : Operador de União Dê o nome dos marinheiros que reservaram
barcos vermelhos ou verdes. 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’)
![Page 28: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/28.jpg)
Variante: Calcula a mesma resposta ?(SIM) 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’) )
![Page 29: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/29.jpg)
Variante: calcula a mesma resposta ? (SIM !!)(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 30: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/30.jpg)
Operador de Divisão Dê o nome dos marinheiros que reservaram todos os barcos.
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) )
Identificadores de barcos que não foram reservados pelo marinheiro comidentificador Sid
![Page 31: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/31.jpg)
Variante (sem EXCEPT) Dê o nome dos marinheiros que reservaram todos os barcos.
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) )
Identificadores de barcos que foram reservados pelo marinheiro comIdentificador SID
Identificadoresde barcosque não foramreservados pelomarinheiro com Identificador SID
![Page 32: SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.](https://reader036.fdocuments.net/reader036/viewer/2022081507/552fc105497959413d8c0474/html5/thumbnails/32.jpg)
Exercício 5
Dê o nome dos marinheiros que reservaram todos os barcos vermelhos.
SELECT S.SNOMEFROM SAILORS SWHERE NOT EXISTS
( (SELECT B.BID FROM BARCOS B, RESERVAS R WHERE B.Cor = ‘Vermelho’) EXCEPT (SELECT R.BID FROM RESERVAS R WHERE R.SID = S.SID) )