top of page

SQL : Chapitre 9

 Operations sur les sous ensembles

Learning by Doing.
Le monde du SQL.
Chapitre 9.

-> Comparez les requêtes suivantes. Que pouvez-vous en conclure ?

 

SELECT * FROM student

WHERE unv_name='PSB'

UNION

SELECT * FROM student

WHERE std_nationality='French';

 

SELECT * FROM student

WHERE unv_name='PSB'

UNION ALL

SELECT * FROM student

WHERE std_nationality='French';

​

Notez que l'opérateur UNION enlève les doublons par défaut. UNION ALL permet de garder les doublons dans le résultat.

​

-> Comparez les requêtes suivantes. Pourquoi la première requête fonctionne et la deuxième ne fonctionnent pas ? Notez l’erreur qui s’affiche. Que pouvez-vous en conclure ?

 

SELECT std_name, std_surname FROM student

UNION

SELECT unv_name, unv_country FROM university

 

SELECT * FROM student

UNION

SELECT * FROM university

​

La première requête fonctionne même si elle n’a pas beaucoup de sens, car il y a le même nombre de colonnes dans les résultats de 2 SELECT ce qui permet de les réunir. La deuxième requête doit produire l'erreur suivante, car le nombre de colonnes dans les résultats de deux SELECT est différent.

​

#1222 - The used SELECT statements have a different number of columns

​

1 Les visites guidées

​

-> Afficher les utilisateurs qui ne sont pas guides ?

​

SELECT *
FROM utilisateur u
WHERE u.usr_email NOT IN (SELECT t.tour_guide FROM tour t)

​

-> Afficher les tours qui n’ont reçu aucun commentaire ou note ?

​

SELECT *
FROM tour t
WHERE t.tour_id NOT IN (SELECT c.tour_id FROM commentaire c);

​

-> Nous souhaitons connaitre des utilisateurs qui ont plus incline à promouvoir notre plateforme. Si l’utilisateurs a laissé une note supérieure à 3, on le considère comme « Promoteur ». Si l’utilisateurs a laissé une note inferieur à 4, on le considère comme « Détracteur ». Les autres utilisateurs sont considérés « Neutre ». Proposez une requête qui permet de connaitre cette information.

​

SELECT c.usr_email, "Promoteur" FROM commentaire c WHERE c.cmt_note>3
UNION
SELECT c2.usr_email, "Détracteur" FROM commentaire c2 WHERE c2.cmt_note<4
UNION
SELECT u.usr_email, "Neutre" FROM utilisateur u WHERE u.usr_email NOT IN (SELECT c3.usr_email FROM commentaire c3)

​

-> Affichez les guides qui sont aussi des touristes : les guide qui ont déjà effectué une réservation ou laissé un commentaire dans le passé.

​

SELECT DISTINCT t.tour_guide
FROM tour t
WHERE t.tour_guide IN (SELECT c.usr_email FROM commentaire c)

OR t.tour_guide IN (SELECT b.usr_customer FROM booking b);

​

-> Afficher les tours qui n’ont jamais au de réservations ?

​

SELECT *
FROM tour t
WHERE t.tour_id NOT IN (SELECT b.tour_id FROM booking b)

​

bottom of page