SQL - Sous-requêtes
Expression des sous-requêtes
Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en cascade).
Une sous-requête doit être placée à la suite d'une clause WHERE ou HAVING, et doit remplacer une constante ou un groupe de constantes qui permettraient en temps normal d'exprimer la qualification.
- lorsque la sous-requête remplace une constante utilisée avec des opérateurs classiques, elle doit obligatoirement renvoyer une seule réponse (une table d'une ligne et une colonne). Par exemple :
SELECT ---- FROM ---- WHERE ---- < (SELECT ---- FROM ----)
- lorsque la sous-requête remplace une constante utilisée dans une expression mettant en jeu les opérateurs IN, EXISTS, ALL ou ANY, elle doit obligatoirement renvoyer une seule ligne.
SELECT ---- FROM ---- WHERE ---- IN (SELECT ---- FROM ----)
Soit la table suivante :
Table Occaz
Marque | Modele | Serie | Numero | Compteur |
---|---|---|---|---|
Renault | 18 | RL | 4698 SJ 45 | 123450 |
Renault | Kangoo | RL | 4568 HD 16 | 56000 |
Renault | Kangoo | RL | 6576 VE 38 | 12000 |
Peugeot | 106 | KID | 7845 ZS 83 | 75600 |
Peugeot | 309 | chorus | 7647 ABY 82 | 189500 |
Fiat | Punto | GTI | 8941 UD 61 | 80232 |
Audi | A4 | Quattro | 7846 AZS 75 | 21350 |
- La sélection des voitures dont le compteur est inférieur à la moyenne se fait par l'instruction :
SELECT * FROM OCCAZ WHERE Compteur < (SELECT AVG(Compteur) FROM OCCAZ)
Résultat
Marque</span> | Modele</span> | Serie | Numero | Compteur |
---|---|---|---|---|
Renault | Kangoo | RL | 4568 HD 16 | 56000 |
Renault | Kangoo | RL | 6576 VE 38 | 12000 |
Peugeot | 106 | KID | 7845 ZS 83 | 75600 |
Audi | A4 | Quattro | 7846 AZS 75 | 21350 |