Syntaxe de SELECT
<<<
Sous-sélections ( SubSELECT ) Syntaxe de TRUNCATE
>>>

14.1 Manipulation de données : SELECT , INSERT , UPDATE , DELETE
14 Syntaxe des commandes SQL
 Manuel de Référence MySQL 4.1 : Version Française

Syntaxe de DELETE
Syntaxe de DO
Syntaxe de HANDLER
Syntaxe de INSERT
Syntaxe de LOAD DATA INFILE
Syntaxe de REPLACE
Syntaxe de SELECT
->Sous-sélections ( SubSELECT )
Syntaxe de TRUNCATE
Syntaxe de UPDATE

14.1.8 Sous-sélections ( SubSELECT )

Une sous-requête est une commande SELECT dans une autre commande. Par exemple :


SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
La requête externe (ou commande externe ), et (SELECT column1 FROM t2) est la sous-requête . Nous disons que la sous-requête est imbriquée dans la requête externe, et en fait, il est possible d'imbriquer des requêtes dans des sous-requêtes, avec d'autres commandes. Une sous-requête doit toujours être entre parenthèses.

Depuis la version 4.1, MySQL supporte toutes les formes de sous-requêtes et opérations que le standard SQL requiert, ainsi que quelques fonctionnalités spécifiques. Les avantages des sous-requêtes sont :

  • Elles permettent aux requêtes d'être structuré pour que chaque partie puisse être isolée.
  • Elles fournissent une méthode pour réaliser des opérations qui seraient complexes, et impliqueraient des unions et jointures.
  • Elles sont, au dire de nombreuses personnes, lisibles. En fait, c'est les sous-requêtes qui ont donné aux inventeurs le nom original de SQL ``Structured Query Language'' .

Dans les versions plus anciennes de MySQL, il fallait trouver des palliatifs, et contourner les sous-requêtes. Il est bien plus facile de se mettre aux sous-requêtes.

Voici un exemple de commande qui montre les principaux avantages des sous-requêtes et de leur syntaxe, aussi bien pour celle qui est proposée par le standard, que celle de MySQL.

DELETE FROM t1
WHERE s11 > ANY
(SELECT COUNT(*) /* no hint */ FROM t2
WHERE NOT EXISTS
  (SELECT * FROM t3
   WHERE ROW(5*t2.s1,77)=
    (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
     (SELECT * FROM t5) AS t5)));
Pour les versions de MySQL antérieure à la version 4.1, la plupart des sous requêtes peuvent être réécrites avec des jointures et d'autres méthodes. Se passer des sous-requêtes .

Sommaire :

<< Sous-sélections ( SubSELECT ) >>
Syntaxe de SELECT Manipulation de données : SELECT , INSERT , UPDATE , DELETE Syntaxe de TRUNCATE