En langage SQL, on utilise des requêtes pour lire, ajouter, modifier ou supprimer des données présentes dans une base de données. Lorsque les requêtes sont complexes, il faut parfois travailler à partir de résultats intermédiaires qui proviennent eux-même d’autres requêtes : c’est le but des sous-requêtes ou requêtes imbriquées.
Une sous-requête est tout simplement une requête encapsulée dans une autre requête.
Exemples de sous-requêtes
SELECT disque_ref, disque_nom FROM disques WHERE disque_prix = ( SELECT MAX(disque_prix) FROM disques ) SELECT client_nom, client_prenom FROM clients WHERE NOT EXISTS ( SELECT 1 FROM commandes WHERE client.client_id = commande.comm_id )
Caractéristiques des sous-requêtes
- L’utilisation d’alias facilite la compréhension des requêtes/sous-requêtes en rendant la lecture plus simple. Pour les sous-requêtes dans le FROM, c’est impératif ;
- Parfois, les sous-requêtes peuvent être remplacées par des jointures. Les jointures sont plus rapides mais les sous-requêtes peuvent être plus lisibles. C’est surtout une question d’habitude et de préférence personnelle ;
- Le résultat de chaque sous-requête sert dans la requête de niveau immédiatement supérieur que l’on appelle requête principale ;
- Il est possible d’imbriquer autant de sous-requêtes que nécessaire (requête / sous-requête / sous-sous requêtes…) ;
- Une sous-requête peut retourner un seul résultat ou une colonne. Dans le second cas, la sous-requête peut être synchronisée avec la requête principale, on parle alors de requête corrélée ;
- Il est possible d’utiliser les prédicats EXISTS, IN, ANY, ALL et SOME combinés avec le NOT pour filtrer les résultats d’une sous-requête.