Exercice SQL corrigé gestion de spectacles

Quelles sont les dates du concert de Corneille au Zenith ?

En algèbre relationnelle :
?Date[Concert x ?Chanteur=’Corneille'(Spectacle) x ?Nom=’Zenith'(Salle)]

En calcul relationnel :
{t.Date|Concert(t)?[?u,vSpectacle(u)?Salle(v)?(u.Spectacle_ID =t.Spectacle_ID)? (u.Chanteur =? Corneille?) ? (v.Nom =? Zenith?) ? (u.Salle_ID = v.Salle_ID) ] }

En SQL:

SELECT Date
FROM Concert t, Spectacle u, Salle v
WHERE t.Spectacle_ID = u.Spectacle_ID
AND u.Chanteur = 'Corneille'
AND u.Salle_ID = v.Salle_ID
AND v.Nom = 'Zenith'

2- Quels sont les noms des salles ayant la plus grande capacité ?

En calcul relationnel :
{t.Nom | Salle(t) ? ¬[? u Salle(u) (u.Capacite >=t.Capacite) ] }

En SQL:
Il est possible de traduire directement la requête exprimée en calcul relationnel, comme ci-dessous.

SELECT Nom
FROM Salle t
WHERE NOT EXISTS 
(SELECT * FROM Salle u
WHERE u.Capacité >= t. Capacité
)

Il est également possible d’utiliser l’opérateur d’agrégation MAX, comme pour la requêtesuivante.

SELECT Nom
FROM Salle
WHERE Capacité >= ( SELECT (MAX(Capacité)
FROM Salle
)

Il est également possible d’utiliser le mot-clé ALL :

SELECT Nom
FROM Salle
WHERE Capacité >= ALL ( SELECT Capacité
FROM Salle
)

3- Quels sont les chanteurs n’ayant jamais réalisé de concert à la Cygale ?

En calcul relationnel :
t.Chanteur | Spectacle(t) ? ¬[? u, v Spectacle(u) ? Salle(v) ? (v.Nom =? Cygale?) ? (u.Chanteur =t.Chanteur)? (u.Salle_ID =v.Salle_ID) ] }

En SQL:

SELECT Chanteur
FROM Spectacle
WHERE Chanteur NOT IN 
(SELECT Chanteur
FROM Spectacle u, Salle v
WHERE u.Salle_ID=v.Salle_ID
AND v.Nom='Cygale'
)

Cette requête peut aussi s’exprimer avec un NOT EXISTS en utilisant une variable nuplet tdans le premier FROM, par une simple traduction du calcul relationnel :

SELECT Chanteur
FROM Spectacle t
WHERE Chanteur NOT EXISTS 
(SELECT * FROM Spectacle u, Salle v
WHERE u.Salle_ID=v.Salle_ID
AND v.Nom='Cygale'
AND t.CHanteur=u.Chanteur
)

4- Quels sont les chanteurs ayant réalisé au moins un concert dans toutes les salles?

En algèbre relationnelle :
?Chanteur,Salle_ID(Spectacle x Salle)÷?Salle_ID(Salle)

En calcul relationnel :
{t.Chanteur|Spectacle(t)?[?u(Salle(u))=?(?vSpectacle(v)?(v.Chanteur =t.Chanteur)? (u.Salle_ID = v.Salle_ID) ) ] }

En SQL:

SELECT Chanteur FROM Spectacle t 
WHERE NOT EXISTS
(SELECT * FROM Salle u WHERE NOT EXISTS
(SELECT * FROM Spectacle v
WHERE v.Chanteur = t. Chanteur 
AND u.Salle_ID = v.Salle_ID
)
)

5- Quels sont les dates et les identi cateurs des concerts pour lesquels il ne resteaucun billet invendu ?

En SQL:

SELECT Concert_ID, Date
FROM Concert t
WHERE NOT EXISTS 
(SELECT * FROM Billet u
WHERE u.Concert_ID=t.Concert_ID
AND NOT EXISTS 
(SELECT * FROM Vente v
WHERE u.Billet_ID = v.Billet_ID
)
)

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *