SQL - Fiche : GROUP BY, HAVING, ORDER BY
1. EXISTS
- Verifie si une sous-requete retourne au moins UNE ligne.
- Utilisation : quand on veut savoir si un lien existe.
Exemple :
SELECT nomCli
FROM Client C
WHERE EXISTS (
SELECT 1 FROM Reservation R WHERE R.numCli = C.numCli
);
=> Affiche les clients qui ont AU MOINS une reservation.
2. NOT EXISTS
- Verifie si une sous-requete retourne AUCUNE ligne.
- Utilisation : pour detecter les absences.
Exemple :
SELECT nomCli
FROM Client C
WHERE NOT EXISTS (
SELECT 1 FROM Reservation R WHERE R.numCli = C.numCli
);
=> Affiche les clients qui N'ONT PAS de reservation.
3. ALL
SQL - Fiche : GROUP BY, HAVING, ORDER BY
- Compare une valeur avec TOUTES les valeurs d'une sous-requete.
- Utile pour verifier une condition sur l'ensemble des resultats.
Exemple :
SELECT * FROM Chambre
WHERE nbLits > ALL (
SELECT nbLits FROM Chambre WHERE numHot = 'H10'
);
=> Affiche les chambres ayant PLUS de lits que TOUTES celles de l'hotel H10.
4. ANY / SOME
- Compare une valeur avec AU MOINS UNE valeur de la sous-requete.
- ANY et SOME sont synonymes.
Exemple :
SELECT * FROM Chambre
WHERE nbLits > ANY (
SELECT nbLits FROM Chambre WHERE numHot = 'H10'
);
=> Affiche les chambres ayant PLUS de lits que AU MOINS une chambre de l'hotel H10.
5. Astuces
- EXISTS et NOT EXISTS sont utiles pour tester la PRESENCE ou l'ABSENCE.
- ALL = condition vraie pour TOUT (ex : superieur a toutes les valeurs).
- ANY = condition vraie pour AU MOINS UNE (ex : superieur a une valeur).
- Teste toujours ta sous-requete seule pour comprendre ce qu'elle retourne.
SQL - Fiche : GROUP BY, HAVING, ORDER BY
- Utilise EXISTS pour plus de performance si tu nas pas besoin des valeurs.
Rappel :
EXISTS => Vrai si au moins UNE ligne existe.
NOT EXISTS => Vrai si AUCUNE ligne ne correspond.
ALL => Vrai si la condition est vraie pour TOUTES les lignes.
ANY/SOME => Vrai si la condition est vraie pour AU MOINS UNE ligne.