A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.

Cópias: 1
SQL – Consultas Aninhadas e Agregação Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.

Apresentações semelhantes


Apresentação em tema: "SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke."— Transcrição da apresentação:

1 SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke

2 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

3 Dê os nomes dos marinheiros que reservaram barcos vermelhos SELECT S.Snome FROM Sailors S WHERE 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 Idade N1 N2 N3 N4 N5 N6 N7 N6 N8 N ,5 25, ,5 63,5 Sid BidDia D1 D3 D4 D D6 D7 D8 D9 Bid BN Cor Barcos A1 A2 A3 Verm Verde Azul N1 N3 N6 Resposta

4 Dê os nomes dos marinheiros que NÃO reservaram barcos vermelhos SELECT S.Snome FROM Sailors S WHERE 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 Snome Status Idade N1 N2 N3 N4 N5 N6 N7 N6 N8 N ,5 25, ,5 63,5 Sid Bid Dia D1 D3 D4 D D6 D7 D8 D9 Bid BN Cor Barcos A1 A2 A3 Verm Verde Azul N2 N4 N7 Resposta N5 N8 N9 N6

5 Dê os nomes dos marinheiros que reservaram barcos não vermelhos SELECT S.Snome FROM Sailors S WHERE 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 Snome Status Idade N1 N2 N3 N4 N5 N6 N7 N6 N8 N ,5 25, ,5 63,5 Sid BidDia D1 D3 D4 D D6 D7 D8 D9 Bid BN Cor Barcos A1 A2 A3 Verm Verde Azul N1 N3 N6 Resposta 74 N6

6 Dê os nomes dos marinheiros que não reservaram barcos não vermelhos SELECT S.Snome FROM Sailors S WHERE 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)) N2 N4 N5 Resposta 74 N7 N8 N9 Sailors Reservas Sid Snome Status Idade N1 N2 N3 N4 N5 N6 N7 N6 N8 N ,5 25, ,5 63,5 Sid BidDia D1 D3 D4 D D6 D7 D8 D9 Bid BN Cor Barcos A1 A2 A3 Verm Verde Azul

7 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

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

9 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 ESTUDANTE WHERE E.PERIODO = 1 AND E.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))

10 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 ESTUDANTE WHERE E.PERIODO = 1 AND E.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)))

11 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

12 Exemplo Encontre nome de marinheiros que reservaram o barco 103 SELECT S.Snome FROM Sailors S WHERE EXISTS (SELECT * FROM Reservas R WHERE R.Bid = 103 AND R.Sid = S.Sid)

13 Exemplo Encontre nome de marinheiros que não reservaram o barco 103 SELECT S.Snome FROM Sailors S WHERE NOT EXISTS (SELECT * FROM Reservas R WHERE R.Bid = 103 AND R.Sid = S.Sid)

14 Exemplo Encontre nome de marinheiros que reservaram uma única vez o barco 103 SELECT S.Snome FROM Sailors S WHERE UNIQUE (SELECT * FROM Reservas R WHERE R.Bid = 103 AND R.Sid = S.Sid)

15 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

16 Exemplo Encontre os identificadores de marinheiros cujo status é melhor do que algum marinheiro chamado Horácio SELECT S.Sid FROM Sailors S WHERE S.Status >= ANY (SELECT S2.Status FROM Sailors S2 WHERE S2.Snome = Horacio)

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

18 Exercício 1 Quais são os nomes dos marinheiros mais jovens que reservaram o barco 103 ? SELECT S.Snome FROM Sailors WHERE S.Idade <= ALL (SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid AND R.Bid = 103)

19 Consultas Aninhadas Correlacionadas (a evitar - ineficientes) Encontre nome de marinheiros que reservaram o barco 103 SELECT S.Snome FROM Sailors S WHERE EXISTS (SELECT * FROM Reservas R WHERE R.Bid = 103 AND R.Sid = S.Sid) Consulta executada repetidamente: uma vez para cada tupla da relação Sailors

20 Exercício 2 A consulta a seguir é correlacionada ? SELECT S.Snome FROM Sailors WHERE S.Idade <= ALL (SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid AND R.Bid = 103) Resposta: Não

21 Como simular operador de Intersecção Encontre 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)

22 Variante: calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE 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) )

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

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

25 Variante: Calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE 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) )

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

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

28 Variante: Calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE 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) )

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

30 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 com identificador Sid

31 Variante (sem EXCEPT) 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 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 com Identificador SID Identificadores de barcos que não foram reservados pelo marinheiro com Identificador SID

32 Exercício 5 Dê o nome dos marinheiros que reservaram todos os barcos vermelhos. SELECT S.SNOME FROM SAILORS S WHERE 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) )


Carregar ppt "SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke."

Apresentações semelhantes


Anúncios Google