Sub Queries

30 min Niveau 9

Une sous-requête ou une requête interne ou une requête imbriquée est une requête à l'intérieur d'une autre requête PostgreSQL et incorporée dans la clause WHERE.

Une sous-requête est utilisée pour renvoyer des données qui seront utilisées dans la requête principale comme condition pour restreindre davantage les données à récupérer.

Les sous-requêtes peuvent être utilisées avec les instructions SELECT, INSERT, UPDATE et DELETE, ainsi qu'avec des opérateurs tels que =, <, >, >=, <=, IN, etc.

Il y a quelques règles que les sous-requêtes doivent respecter :

  • Les instructions SELECT, INSERT, UPDATE et DELETE.
  • Les sous-requêtes doivent être placées entre parenthèses.
  • Une sous-requête ne peut comporter qu'une seule colonne dans la clause SELECT, sauf si plusieurs colonnes sont présentes dans la requête principale pour que la sous-requête puisse comparer les colonnes sélectionnées.
  • Un ORDER BY ne peut pas être utilisé dans une sous-requête, bien que la requête principale puisse utiliser un ORDER BY. Le GROUP BY peut être utilisé pour exécuter la même fonction que le ORDER BY dans une sous-requête.
  • Les sous-requêtes qui renvoient plus d'une ligne ne peuvent être utilisées qu'avec des opérateurs de valeurs multiples, tels que l'opérateur IN, EXISTS, NOT IN, ANY/SOME, ALL.
  • L'opérateur BETWEEN ne peut pas être utilisé avec une sous-requête ; cependant, BETWEEN peut être utilisé dans la sous-requête.

Sous-requêtes avec l'instruction SELECT

Les sous-requêtes sont le plus souvent utilisées avec l'instruction SELECT. La syntaxe de base est la suivante :

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
    (SELECT column_name [, column_name ]
    FROM table1 [, table2 ]
    [WHERE])

Example

Considérons la table SOCIÉTÉ comportant les enregistrements suivants :

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Maintenant, vérifions la sous-requête suivante avec l'instruction SELECT :

testdb=# SELECT *
    FROM COMPANY
    WHERE ID IN (SELECT ID
    FROM COMPANY
    WHERE SALARY > 45000) ;

Cela donnerait le résultat suivant :

id | name  | age |  address    | salary
----+-------+-----+-------------+--------
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(2 rows)

Sous-requêtes avec l'instruction INSERT

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus