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.