Exemples de requêtes SQL
La base Conférences
Exercices sur le SELECT sur la base
de gestion des conférences :
- Afficher la liste des personnes (numéro et
nom) qui ont réservé une place pour la conférence numéro 16, dans
l'ordre alphabétique des noms. corrigé
- Afficher pour chaque conférence la liste des
personnes ayant réservé dans l'ordre des numéros de conférences et
dans l'ordre alphabétique pour chaque conférence.
corrigé
- Afficher pour chaque conférence son numéro et
le nom du conférencier ainsi que la liste des personnes ayant
réservé. corrigé
- Afficher le programme de chaque salle pour le
15/11/2004. corrigé
- Afficher pour chaque participant la liste des
conférences pour lesquelles il a réservé. corrigé
- Id mais on affichera également ceux n'ayant
pas réservé. corrigé
- Un participant signale qu'il arrivera le
15/11/2004 à 11h et qu'il doit repartir le 16/11/2004 à 17h. Donnez
la liste des conférences auxquelles il pourrait assister. corrigé
- Afficher la liste des participants parlant la
même langue que monsieur DECOENINCK. corrigé
- Affichez la liste des salles données par leur
numéro, leur emplacement et la précision petite, moyenne ou grande
selon que la capacité est inférieure à 40, entre 40 et 100 ou
supérieure à 100. corrigé
- La salle A7125 du bâtiment A ne peut être
utilisée. Affichez les salles de capacité supérieure.
corrigé
- La salle A7125 du bâtiment A ne peut être
utilisée. Affichez les salles de capacité supérieure et de même
niveau d'équipement. corrigé
- Affichez le nombre de salles et la capacité
totale des salles. corrigé
- Affichez la capacité totale des salles de
moins de 100 places. corrigé
- Affichez la capacité totale des salles par
niveau d'équipement. corrigé
- Affichez pour chaque conférence le nombre de
participants. corrigé
- Affichez la liste des conférences ayant plus
de 100 participants. corrigé
- Lorsque la langue du participant est
différente de la langue de l'orateur, il faut prévoir un casque pour
la traduction. Donnez le nombre de casques à prévoir pour chacune
des conférences. corrigé
- Affichez la liste des participants aux
conférences du thème finances et des participants aux conférences
données en anglais. corrigé
- Affichez la liste des conférences ayant le
lieu le même jour et dans la même salle que la conférence 37. corrigé
- Affichez la liste des salles où sont données
des conférences aec des participants parlant le russe.
corrigé
- Donnez les noms des orateurs qui n'assistent
à aucune conférence . corrigé
- Donnez les noms des participants ayant
assisté à toutes les conférences. corrigé
- Donnez le noms de l'orateur ayant eu le plus
de succès, c'est-à-dire, l'audience la plus importante à une de ses
conférences. corrigé
- Donnez le noms de l'orateur ayant eu le plus
de succès, c'est-à-dire, l'audience cumulée la plus importante à toutes ses
conférences. corrigé
Le corrigé utilise la syntaxe SQL-89 où les jointures sont explicitées
dans le WHERE. Ceci à l'exception des cas où une requête de type OUTER
JOIN est utile.
- Afficher la liste des personnes (numéro et
nom) qui ont réservé une place pour la conférence numéro 16, dans
l'ordre alphabétique des noms.
SELECT P.numparticipant, P.nom
FROM PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
AND C.numconférence=16
ORDER BY P.nom
retour
- Afficher pour chaque conférence la liste des
personnes ayant réservé dans l'ordre des numéros de conférences et
dans l'ordre alphabétique pour chaque conférence.
SELECT C.numconférence, P.nom || ' ' || P.prénom
FROM PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
ORDER BY C.numconférence, P.nom || ' ' || P.prénom
retour
- Afficher pour chaque conférence son numéro
et le nom du conférencier ainsi que la liste des personnes ayant
réservé. Il faut ouvrir deux fois la table des participants, une
première fois pour associer l'orateur, une seconde fois pour
retrouver les participants en passant par la table des
réservations.
SELECT C.numconférence, PP.nom conferencier, P.nom participant
FROM PARTICIPANTS PP, PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE PP.numparticipant = C.reforateur
AND P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
ORDER BY C.numconférence, P.nom
retour
- Afficher le programme de chaque salle pour le
15/11/2004.
SELECT S.numsalle, C.titre, C.heuredébut, C.heuredébut+durée
FROM SALLES S, CONFERENCES C
WHERE S.numsalle = C.refsalle
AND C.date = date '2004-11-15'
ORDER BY S.numsalle, C.heuredébut
retour
- Afficher pour chaque participant la liste des
conférences pour lesquelles il a réservé.
SELECT P.numparticipant, P.nom, C.numconférence, C.titre
FROM PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
ORDER BY P.numparticipant
retour
- Id mais on affichera également ceux n'ayant
pas réservé. Faire une jointure gauche pour faire apparaître un
participant n'apparaissant pas dans RESERVATIONS.
SELECT P.numparticipant, P.nom, C.numconférence, C.titre
FROM (PARTICIPANTS P LEFT JOIN RESERVATIONS R ON P.numparticipant =
R.refparticipant)
INNER JOIN CONFERENCES ON R.refconférence = C.numconférence
ORDER BY P.numparticipant
retour
- Un participant signale qu'il arrivera le
15/11/2004 à 11h et qu'il doit repartir le 16/11/2004 à 17h. Donnez
la liste des conférences auxquelles il pourrait assister. nous
supposons que le champ CONFERENCES.date est de type DATE, le champ
CONFERENCES.heuredébut de type TIME et le champ
CONFERENCES.duree est de type INTERVAL
SELECT C.numconférence, C.titre, C.heuredébut, C.heuredébut+durée
FROM CONFERENCES C
WHERE C.date + C.heuredébut >= timestamp '2004-11-15 11:00'
AND C.date + C.heuredébut + durée <= timestamp '2004-11-16 17:00'
retour
- Afficher la liste des participants parlant la
même langue que monsieur DECOENINCK. Vous avez le choix entre une
auto-jointure ou une requête imbriquée.
SELECT P.numparticipant, P.nom
FROM PARTICIPANTS P, PARTICIPANTS PP
WHERE P.langue = PP.langue
AND PP.nom = 'DECOENINCK'
ou
SELECT P.numparticipant, P.nom
FROM PARTICIPANTS P
WHERE P.langue = (SELECT PP.langue FROM PARTICIPANTS PP WHERE PP.nom = 'DECOENINCK')
retour
- Affichez la liste des salles données par leur
numéro, leur emplacement et la précision petite, moyenne ou grande
selon que la capacité est inférieure à 40, entre 40 et 100 ou
supérieure à 100.
SELECT S.numsalle, S.nom,
CASE WHEN S.capacité <=40 THEN 'petite'
WHEN S.capacité <=100 THEN 'moyenne'
ELSE 'grande'
FROM SALLES S
retour
- La salle A7125 du bâtiment A ne peut être
utilisée. Affichez les salles de capacité supérieure. Une
jointure non égalitaire
SELECT S.numsalle, S.nom, S.capacité
FROM SALLES S, SALLES SS
WHERE S.capacité >= SS.capacité
AND SS.numsalle = 'A7125'
ou
SELECT S.numsalle, S.nom, S.capacité
FROM SALLES S
WHERE S.capacité >= (SELECT SS.capacité FROM SALLES SS WHERE
SS.numsalle = 'A7125' )
retour
- La salle A7125 du bâtiment A ne peut être
utilisée. Affichez les salles de capacité supérieure et de même
niveau d'équipement.
SELECT S.numsalle, S.nom, S.capacité
FROM SALLES S, SALLES SS
WHERE S.capacité >= SS.capacité
AND S.équipement = SS.équipement
AND SS.numsalle = 'A7125'
retour
- Affichez le nombre de salles et la capacité
totale des salles.
SELECT COUNT(S.numsalle) nbsalles, SUM(S.capacité) capacitétotale
FROM SALLES S
retour
- Affichez la capacité totale des salles de
moins de 100 places.
SELECT SUM(S.capacité)
FROM SALLES S
WHERE S.capacité <= 100
retour
- Affichez la capacité totale des salles par
niveau d'équipement.
SELECT SUM(S.capacité)
FROM SALLES S
GROUP BY S.équipement
retour
- Affichez pour chaque conférence le nombre de
participants.
SELECT C.numconférence, COUNT(R.refparticipant) nbparticipants
FROM RESERVATIONS R, CONFERENCES C
WHERE R.refconférence = C.numconférence
GROUP BY C.numconférence
retour
- Affichez la liste des conférences ayant plus
de 100 participants.
SELECT C.numconférence, COUNT(R.refparticipant) nbparticipants
FROM RESERVATIONS R, CONFERENCES C
WHERE R.refconférence = C.numconférence
GROUP BY C.numconférence
HAVING nbparticipants >= 100
retour
- Lorsque la langue du participant est
différente de la langue de l'orateur, il faut prévoir un casque pour
la traduction. Donnez le nombre de casques à prévoir pour chacune
des conférences.
SELECT C.numconférence, COUNT(P.langue) nbcasques
FROM PARTICIPANTS PP, PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE PP.numparticipant = C.reforateur
AND P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
AND PP.langue <> P.langue
GROUP BY C.numconférence
retour
- Affichez la liste des participants aux
conférences du thème finances et des participants aux conférences
données en anglais. Un exemple d'union
SELECT P.nom || ' ' || P.prénom
FROM PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
AND C.thème='finances'
UNION
SELECT P.nom || ' ' || P.prénom
FROM PARTICIPANTS PP, PARTICIPANTS P, RESERVATIONS R, CONFERENCES C
WHERE PP.numparticipant = C.reforateur
AND P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
AND PP.langue='anglais'
retour
- Affichez la liste des conférences ayant le
lieu le même jour et dans la même salle que la conférence 37.
SELECT C.numconférence, C.titre FROM CONFERENCES C, SALLES S
WHERE C.refsalle = S.numsalle
AND C.date = (SELECT CC.date FROM CONFERENCES CC WHERE CC.numconférence=37)
AND S.numsalle = (SELECT SS.numsalle FROM CONFERENCES CC, SALLES SS
WHERE CC.refsalle = SS.numsalle AND CC.numconférence=37)
retour
- Affichez la liste des salles où sont données
des conférences avec des participants parlant le russe.
SELECT S.numsalle, S.nom
FROM PARTICIPANTS P, RESERVATIONS R, CONFERENCES C, SALLES S
WHERE P.numparticipant = R.refparticipant
AND R.refconférence = C.numconférence
AND S.numsalle = C.refsalle
AND P.langue = 'russe'
retour
- Donnez les noms des orateurs qui n'assistent
à aucune conférence .
SELECT P.nom || ' ' || P.prénom
FROM PARTICIPANTS P, CONFERENCES C
WHERE P.numparticipant = C.reforateur
AND P.numparticipant NOT IN (SELECT R.refparticipant FROM RESERVATIONS R)
corrigé
- Donnez les noms des participants ayant
assisté à toutes les conférences.
le nombre de conférences auxquelles il assiste est égal au
nombre total de conférences
SELECT P.nom || ' ' || P.prénom FROM PARTICIPANTS P WHERE
(SELECT COUNT(R.refconférence) nbparticipations FROM RESERVATIONS R WHERE
R.refparticipant = P.numparticipant)
=
(SELECT COUNT(*) nbconférences FROM CONFERENCES)
ou il n'existe pas de conférence à laquelle il n'a pas participé
SELECT P.nom || ' ' || P.prénom FROM PARTICIPANTS P WHERE NOT EXISTS
(SELECT * FROM CONFERENCES C WHERE NOT EXISTS
(SELECT * FROM RESERVATIONS R WHERE P.numparticipant =
R.refparticipant AND R.refconférence = C.numconférence))
retour
- Donnez le noms de l'orateur ayant eu le plus
de succès, c'est-à-dire, l'audience la plus importante à une de ses
conférences. orateur de la conférence dont le nombre de
participants est égal au nombre max de participants à une des
conférences. Erreur du débutant : écrire MAX(COUNT()).
SELECT P.nom || ' ' || P.prénom FROM PARTICIPANTS P, CONFERENCES C
WHERE P.numparticipant = C.reforateur
AND C.numconférence =
(SELECT CC.numconférence FROM CONFERENCES CC
WHERE (SELECT COUNT(R.refparticipant) nbpart FROM RESERVATIONS R WHERE
R.refconférence = CC.numconférence)
=
(SELECT MAX(nbparti)
FROM (SELECT CCC.numconférence, COUNT(RR.refparticipant) nbparti FROM
RESERVATIONS RR, CONFERENCES CCC WHERE RR.refconférence = CCC.numconférence)))
retour
- Donnez le noms de l'orateur ayant eu le plus
de succès, c'est-à-dire, l'audience cumulée la plus importante à toutes ses
conférences. Id avec en plus la somme des comptes.
retour