Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci...

22
Intro Enunciado AR CRT SQL Clase pr´ actica de Lenguajes - AR - CRT - SQL DC - FCEyN - UBA BBDD - 2C - 2017 Clase pr´ actica de Lenguajes - AR - CRT - SQL

Transcript of Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci...

Page 1: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Clase practica de Lenguajes - AR - CRT - SQL

DC - FCEyN - UBA

BBDD - 2C - 2017

Clase practica de Lenguajes - AR - CRT - SQL

Page 2: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Temario

I Introduccion: breve repaso de la notacion de AR.

I Una guıa de 6 ejercicios que vamos a ir resolviendo.

I En AR, luego en CRT y luego en SQL.

Clase practica de Lenguajes - AR - CRT - SQL

Page 3: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Operadores Binarios Unioncompatible

I Union: R ∪ S

I Interseccion: R ∩ S

I Resta: R − S

I Producto Cartesiano:R × S

I Division: R ÷ S

Operadores Unarios

I Renombra atributos:ρ (a1→ a2, b1→ b2,R)

I Renombra una relacion:ρ (S ,R on R)

I Seleccion: σcR

I Proyeccion: πatributoR

Juntas

I Inner Join:I R onc SI R on S

I OuterJoin:I R ./ SI R ./ SI R ./ S

Clase practica de Lenguajes - AR - CRT - SQL

Page 4: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Esquema de Relaciones

I Actor(idActor, nombreActor, edad)

I Serie(idSerie, nombreSerie, . . . .idGe. . . .nero, anoInicio, anoFin)

I Genero(idGenero, nombreGenero)

I Canal(idCanal, nombreCanal)

I Participa En(. . . . . . . .idActor, . . . . . . .idSerie)

I Transmite(. . . . . . . .idCanal,. . . . . . . .idSerie)

Clase practica de Lenguajes - AR - CRT - SQL

Page 5: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends”.

ρ(ACTOR SERIE ,PARTICIPA EN on ACTOR on SERIE )

ρ(FRIENDS MAY 30, σnombreSerie=′Friends′∧edad>30(ACTOR SERIE ))

ρ(Resultado, πnombreActor (FRIENDS MAY 30))

Clase practica de Lenguajes - AR - CRT - SQL

Page 6: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los canales que transmiten todas lasseries de comedia.

ρ(ID SERIE COMEDIA, πidSerie(σnombreGenero=Comedia(SERIE onGENERO)))

ρ(ID CANAL TODAS COMEDIAS ,TRANSMITE ÷ID SERIE COMEDIA

ρ(Resultado, πnombreCanal(ID CANAL TODAS COMEDIAS onCANAL)

Clase practica de Lenguajes - AR - CRT - SQL

Page 7: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas participaronalguna vez en series que comenzaron luego del ano 2000.

ρ(ID ACTOR FR MAY 30, πidActor (σnombreSerie=”Friends”∧edad>30

(PARTICIPA EN on ACTOR on SERIE )))

ρ(ID ACTOR DESP 2000, πidActor (σanoInicio>2000

(PARTICIPA EN on SERIE ))

ρ(ID ACTOR 1 Y 2, ID ACTOR FR MAY 30 ∩ID ACTOR DESP 2000)

ρ(RESULTADO, πnombreActor (ID ACTOR 1 Y 2 on ACTOR))

Clase practica de Lenguajes - AR - CRT - SQL

Page 8: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas nuncaparticiparon en series que comenzaron luego del ano 2000.

Reutilizaremos la relacion ID ACTOR FR MAY 30 del ejercicio anterior.

Obtendremos un conjunto con los actores que sı participaron en series que seiniciaron luego del 2000 y luego al conjunto de todos los actores le restaremoseste conjunto.

ρ(ID ACTOR DESP 2000, πidActor (σanoInicio>200(PARTICIPA EN on SERIE)))

ρ(ID ACTOR NO DESP 2000, πidActor (ACTOR)− ID ACTOR DESP 2000))

ρ(ID ACTOR 1 Y 2, ID ACTOR FR MAY 30 ∩ ID ACTOR NO DESP 2000)

ρ(RESULTADO, πnombreActor (ID ACTOR 1 Y 2 on ACTOR))

Clase practica de Lenguajes - AR - CRT - SQL

Page 9: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de las series que comenzaron masrecientemente.

ρ(SERIE1, SERIE)

ρ(SERIE2, SERIE)

Obtenemos series que no son mas recientes y luego restamos

ρ(ID SERIE INICIO NO MAS RECIENTE , πSERIE1.idSerie(σSERIE1.anoInicio<SERIE2.anoInicio(SERIE1× SERIE2))

ρ(RESULTADO, πidSerie(SERIE)− ID SERIE INICIO NO MAS RECIENTE)

Clase practica de Lenguajes - AR - CRT - SQL

Page 10: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de los actores que participaron en al menos 2series.

ρ(P1,PARTICIPA EN)

ρ(P2,PARTICIPA EN)

ρ(RESULTADO, πidActor (σP1.idActor=P2.idActor∧P1.idSerie 6=P2.idSerie(P1× P2))

Clase practica de Lenguajes - AR - CRT - SQL

Page 11: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends”.

{t/∃a, s, p(a ∈ ACTOR ∧ a.edad > 30 ∧ s ∈ SERIE ∧ s.nombreSerie =”Friends” ∧ p ∈ PARTICIPA EN ∧ p.idActor = a.idActor ∧ p.idSerie =s.idSerie ∧ t.nombreActor = a.nombreActor)}

Clase practica de Lenguajes - AR - CRT - SQL

Page 12: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los canales que transmiten todas lasseries de comedia.

{t/∃c(c ∈ CANAL ∧ t.nombreCanal = c.nombreCanal∧∀s (esSerieComedia(s) =⇒ ∃tra(tra ∈ TRANSMITE ∧ tra.idCanal =

c.idCanal ∧ tra.idSerie = s.ideSerie))}

Definimos esSerieComedia como:

esSerieComedia(s) = s ∈ SERIE ∧ ∃g(g ∈ GENERO ∧ g .idGenero =

s.idGenero ∧ g .nombreGenero = ”Comedia”)

Clase practica de Lenguajes - AR - CRT - SQL

Page 13: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas participaronalguna vez en series que comenzaron luego del ano 2000.

{t/∃a(a ∈ ACTOR ∧mayorde30yEnFriends(a) ∧ actuoDesp2000(a) ∧t.nombreActor = a.nombreActor)}

mayorde30yEnFriends(a) = a.edad > 30 ∧ ∃s, p(s ∈ SERIE ∧ s.nombreSerie =”Friends”∧p ∈ PARATICIPA EN∧p.idActor = a.idActor∧p.idSerie = s.idSerie)

actuoDesp2000(a) = ∃s, p(s ∈ SERIE ∧ s.anoInicio > 2000 ∧ p ∈PARTICIPA EN ∧ p.idActor = a.idActor ∧ p.idSerie = s.idSerie)

Clase practica de Lenguajes - AR - CRT - SQL

Page 14: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas nuncaparticiparon en series que comenzaron luego del ano 2000.

{t/∃a(a ∈ ACTOR ∧mayorde30yEnFriends(a) ∧ nuncaEnSerieDesp2000(a) ∧t.nombreActor = a.nombreActor)}

nuncaEnSerieDesp2000(a) = ¬∃s(s ∈ SERIE ∧ s.anoInicio > 2000 ∧ ∃p(p ∈PARTICIPA EN ∧ p.idActor = a.idActor ∧ p.idSerie = s.idSerie)

Clase practica de Lenguajes - AR - CRT - SQL

Page 15: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de las series que comenzaron masrecientemente.

{t/∃s(s ∈ Serie ∧ t.idSerie = s.idSerie ∧ inicioMasReciente(s))}

I Inicio mas reciente indica que son aquellas tales que no haya otra quecomenzo despues.

inicioMasReciente(s) = ¬∃s′(s′ ∈ SERIE ∧ s′.anoInicio>s.anoInicio)

Clase practica de Lenguajes - AR - CRT - SQL

Page 16: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de los actores que participaron en al menos 2series.

{t/∃a(a ∈ ACTOR ∧ t.idActor = a.idActor ∧ partEnAlMenosDosSeries(a))}

I Deberıa haber 2 tuplas diferentes en PARTICIPA EN para elmismo actor

partEnAlMenosDosSeries(a) = ∃p, p′(p ∈ PARTICIPA EN ∧ p′ ∈PARTICIPA EN ∧ p′ 6= p ∧ p.idActor = a.idActor ∧ p′.idActor = a.idActor)

Clase practica de Lenguajes - AR - CRT - SQL

Page 17: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends”.

1 SELECT a.nombreActor

2 FROM actor a

3 INNER JOIN participa_en p ON a.idActor = p.idActor

4 INNER JOIN serie s ON p.idSerie = s.idSerie

5 WHERE a.edad > 30;

6 AND s.nombreSerie = "Friends";

Clase practica de Lenguajes - AR - CRT - SQL

Page 18: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los canales que transmiten todas lasseries de comedia.

A simpler (and better) SQL approach to relational division. Q0:1 SELECT c.nombrecanal FROM canal c WHERE c.idCanal IN (2 SELECT t.idCanal3 FROM Transmite t4 INNER JOIN Serie s ON t.idSerie = s. idSerie5 INNER JOIN Genero g ON g.idGenero = s.idGenero6 WHERE g.nombreGenero = ”Comedia”7 GROUP BY t.idCanal8 HAVING COUNT(∗) =9 ( SELECT count(∗)

10 FROM serie s11 INNER JOIN Genero g ON g.idGenero = s.idGenero12 WHERE g.nombreGenero = ”Comedia”));

Clase practica de Lenguajes - AR - CRT - SQL

Page 19: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas participaronalguna vez en series que comenzaron luego del ano 2000.

1 SELECT a.nombreActor

2 FROM actor a

3 INNER JOIN participa_en pe ON pe.idActor = a.idActor

4 INNER JOIN serie s ON s.idSerie = pe.idSerie

5 WHERE s.nombreSerie = "Friends"

6 AND a.edad > 30

7 AND EXISTS (SELECT aa.idActor FROM actor aa

8 INNER JOIN participa_en ppe ON

ppe.idActor = aa.idActor

9 INNER JOIN serie s ON se.idSerie =

ppe.idSerie

10 WHERE aa.idActor = a.idActor

11 AND se.anoInicio > 2000);

Clase practica de Lenguajes - AR - CRT - SQL

Page 20: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los nombres de los actores mayores de 30 anos queparticipan en la serie “Friends” y que ademas nuncaparticiparon en series que comenzaron luego del ano 2000.

1 SELECT a.nombreActor

2 FROM actor a

3 INNER JOIN participa_en pe ON pe.idActor = a.idActor

4 INNER JOIN serie s ON s.idSerie = pe.idSerie

5 WHERE s.nombreSerie = "Friends"

6 AND a.edad > 30

7 AND NOT EXISTS (SELECT aa.idActor FROM actor aa

8 INNER JOIN participa_en ppe ON

ppe.idActor = aa.idActor

9 INNER JOIN serie s ON se.idSerie =

ppe.idSerie

10 WHERE aa.idActor = a.idActor

11 AND se.anoInicio > 2000);

Clase practica de Lenguajes - AR - CRT - SQL

Page 21: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de las series que comenzaron masrecientemente.

1 SELECT s.idSerie from serie s

2 WHERE s.anoInicio = (Select MAX(anoInicio) from serie);

Clase practica de Lenguajes - AR - CRT - SQL

Page 22: Clase práctica de Lenguajes - AR - CRT - SQL fileIntro Enunciado AR CRT SQL Temario I Introducci on: breve repaso de la notaci on de AR. I Una gu a de 6 ejercicios que vamos a ir

IntroEnunciado

ARCRTSQL

Listar los ids de los actores que participaron en al menos 2series.

1 SELECT pe.idActor

2 FROM participa_en pe

3 GROUP BY pe.idActor

4 HAVING COUNT(pe.idSerie) >= 2;

Clase practica de Lenguajes - AR - CRT - SQL