Sous-requêtes
Une sous-requête ou subquery en anglais est une façon de récupérer des données à partir d’autres données.
Imaginons une table de référence contenant l’association ‘station’ et ‘longitude’/’latitude’ que nous appellerons ‘long_lat’ :
Imaginons que dans notre table ‘air_quality’ nous n’avons pas la colonne ‘station’.
Maintenant, nous souhaitons récupérer toutes les lignes concernant la station ‘Barcelona -Eixample’…
Alerte Alerte !!
Nous n’avons pas cette colonne dans notre table ‘air_quality’ mais nous l’avons dans la table ‘long_lat’.
Pour récupérer ces lignes, il est nécessaire de faire une sous-requête ! C’est comme son nom l’indique, une requête dans une requête.
SELECT *
FROM air_quality
WHERE longitude = (SELECT longitude
FROM long_lat
WHERE station = 'Barcelona - Eixample')
AND latitude = (SELECT latitude
FROM long_lat
WHERE station = 'Barcelona - Eixample');
Et voici le résultat :
En d’autres termes, la valeur de sortie de la sous-requête devient la valeur d’entrée de la requête mère.
Si nous souhaitons récupérer les données de plusieurs stations, il est également possible de créer un vecteur avec le mot-clé IN
.
Nous souhaitons récupérer les données de ‘Barcelona – Eixample’ et ‘Barcelone Ciutadella’ :
SELECT *
FROM air_quality
WHERE longitude IN (SELECT longitude
FROM long_lat
WHERE station IN ('Barcelona - Eixample', 'Barcelona - Ciutadella'))
AND latitude IN (SELECT latitude
FROM long_lat
WHERE station IN ('Barcelona - Eixample', 'Barcelona - Ciutadella'));
NB : Dans cet exemple, nous souhaitons récupérer les données de deux stations. Il est aussi possible d’utiliser la porte logique OR
à la place du vecteur IN
. Cependant, privilégiez le vecteur IN
car il est plus simple à utiliser si vous avez, comme dans notre exemple, plusieurs stations à récupérer.