Subquery

PostgreSQL 🟡 Mid

Définition

Requête imbriquée dans une autre requête, utilisable dans SELECT, FROM, WHERE ou HAVING. Peut être corrélée (référence la requête externe) ou non-corrélée (indépendante).

Analogie

Une question dans une question : 'Qui gagne plus que la moyenne des salaires ?'

Exemple de code

SELECT name FROM employees
WHERE salary > (
  SELECT AVG(salary) FROM employees
);
-- Ou dans FROM
SELECT * FROM (
  SELECT name, COUNT(*) as cnt
  FROM orders GROUP BY name
) sub WHERE cnt > 5;

Cas d'usage

Filtrer sur un résultat agrégé ou créer des tables dérivées pour des requêtes complexes.

Anti-pattern

Utiliser des sous-requêtes corrélées dans le SELECT quand un JOIN serait plus performant.

Termes liés

#sgbd#interview#database#postgresql

En entretien

  1. Explique-moi la différence entre une sous-requête corrélée et une non-corrélée.

    Une sous-requête corrélée référence la requête externe, alors qu'une non-corrélée est indépendante d'elle. L'exemple typique est 'qui gagne plus que la moyenne des salaires ?', une sous-requête non-corrélée dans le WHERE.

  2. Quand éviter une sous-requête corrélée dans un SELECT ?

    Quand un JOIN serait plus performant : une sous-requête corrélée dans le SELECT peut être ré-exécutée pour chaque ligne, ce qui coûte cher. Un JOIN classique est généralement mieux optimisé par le planneur.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre