Sous-requête

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.