Tutoriel classi...SE CONNECTER
Tutoriel classique SQLite
auteur:php.cn  temps de mise à jour:2022-04-13 17:05:02

Sous-requête SQLite


Une sous-requête, une requête interne ou une requête imbriquée est une requête intégrée dans une clause WHERE au sein d'une autre requête SQLite.

Les données renvoyées à l'aide d'une sous-requête seront utilisées comme conditions dans la requête principale pour limiter davantage les données à récupérer.

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

Voici quelques règles que les sous-requêtes doivent suivre :

  • Les sous-requêtes doivent être placées entre parenthèses.

  • Une sous-requête ne peut avoir qu'une seule colonne dans la clause SELECT, sauf s'il existe plusieurs colonnes dans la requête principale qui sont comparées aux colonnes sélectionnées de la sous-requête.

  • ORDER BY ne peut pas être utilisé dans les sous-requêtes, bien que ORDER BY puisse être utilisé dans la requête principale. GROUP BY peut être utilisé dans des sous-requêtes et possède les mêmes fonctionnalités que ORDER BY.

  • La sous-requête renvoie plus d'une ligne et ne peut être utilisée qu'avec des opérateurs à valeurs multiples tels que l'opérateur IN.

  • L'opérateur BETWEEN ne peut pas être utilisé avec une sous-requête, cependant, BETWEEN peut être utilisé dans une sous-requête.

Utilisation de la sous-requête dans l'instruction SELECT

La sous-requête est généralement utilisée 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])

Exemple

Supposons que la table COMPANY contienne les enregistrements suivants :

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Vérifions maintenant l'utilisation de la sous-requête dans l'instruction SELECT :

sqlite> SELECT * 
     FROM COMPANY 
     WHERE ID IN (SELECT ID 
                  FROM COMPANY 
                  WHERE SALARY > 45000) ;

Cela produira les résultats suivants :

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

Sous-requête dans l'instruction INSERT Utilisation de

La sous-requête peut également être utilisée avec l'instruction INSERT. L'instruction INSERT insère dans une autre table en utilisant les données renvoyées par la sous-requête. Les données sélectionnées dans la sous-requête peuvent être modifiées à l'aide de n'importe quelle fonction caractère, date ou numérique.

La syntaxe de base est la suivante :

INSERT INTO table_name [ (column1 [, column2 ]) ]
           SELECT [ *|column1 [, column2 ]
           FROM table1 [, table2 ]
           [ WHERE VALUE OPERATOR ]

Exemple

Supposons que la structure de COMPANY_BKP est similaire à la table COMPANY et peut être créée en utilisant la même CREATE TABLE, sauf que le nom de la table est remplacé par COMPANY_BKP. Copiez maintenant l'intégralité de la table COMPANY dans COMPANY_BKP avec la syntaxe suivante :

sqlite> INSERT INTO COMPANY_BKP
     SELECT * FROM COMPANY 
     WHERE ID IN (SELECT ID 
                  FROM COMPANY) ;

Sous-requête dans l'instruction UPDATE. La sous-requête

peut être utilisée conjointement avec l'instruction UPDATE. Lors de l'utilisation d'une sous-requête avec l'instruction UPDATE, une ou plusieurs colonnes de la table sont mises à jour.

La syntaxe de base est la suivante :

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Exemple

Supposons que nous ayons la table COMPANY_BKP, qui est une sauvegarde de la table COMPANY.

L'exemple suivant met à jour le SALAIRE de tous les clients dont l'ÂGE est supérieur ou égal à 27 dans la table ENTREPRISE à 0,50 fois la valeur d'origine :

sqlite> UPDATE COMPANY
     SET SALARY = SALARY * 0.50
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE >= 27 );

Cela affectera deux lignes. les enregistrements de la table COMPANY sont les suivants :

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  10000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Sous-requête dans l'instruction DELETE L'utilisation de la sous-requête

peut être utilisée avec l'instruction DELETE, tout comme les autres instructions mentionnées ci-dessus.

La syntaxe de base est la suivante :

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Exemple

Supposons que nous ayons la table COMPANY_BKP, qui est une sauvegarde de la table COMPANY.

L'exemple suivant supprime tous les enregistrements clients de la table COMPANY avec un AGE supérieur ou égal à 27 :

sqlite> DELETE FROM COMPANY
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE > 27 );

Cela affectera deux lignes, et les enregistrements finaux de la table COMPANY sont les suivants suit :

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Site Web PHP chinois