Dans dans forme la plus simple, une sous-requête scalaire, par opposition à une sous-requête de ligne ou de table qui seront présentées plus loin, est un simple opérande. Vous pouvez l'utilisez à chaque fois qu'une valeur de colonne ou qu'une valeur littérale est valide, et vous pouvez en attendre les mêmes caractéristiques : type de données, taille et indication de nullité, etc. Par exemple :
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL); SELECT (SELECT s2 FROM t1);
La sous-requête de la commande SELECT
ci-dessus est de type CHAR
, de longueur 5.
Son jeu de caractères et sa collation sont ceux fournis par
défaut, et elle porte une marque de nullité. En fait, toutes
les sous-requêtes peuvent prendre la valeur
NULL
, car si la table est vide, la valeur
de la sous-requête sera alors NULL
. Il y a
quelques restrictions :
Une sous-requête peut être utilisée avec les commandes
suivantes : SELECT
,
INSERT
, UPDATE
,
DELETE
, SET
et
DO
.
Une sous-requête peut contenir les mots-clé et les
clauses qu'une commande SELECT
peut
contenir : DISTINCT
, GROUP
BY
, ORDER BY
,
LIMIT
, jointures,
UNION
, commentaires, fonctions, etc.
Ainsi, lorsque vous lirez les exemples des sections suivantes
qui utilisent la commande spartiate (SELECT column1
FROM t1)
, imaginez que votre code pourra contenir
des commandes bien plus diverses et complexes.
Par exemple, supposons que nous avons ces deux tables :
CREATE TABLE t1 (s1 INT); INSERT INTO t1 VALUES (1); CREATE TABLE t2 (s1 INT); INSERT INTO t2 VALUES (2);
Puis, que vous envoyons la commande suivante
SELECT
:
SELECT (SELECT s1 FROM t2) FROM t1;
Le résultat sera 2
car il y a une ligne
dans t2
, dont la colonne
s1
a une valeur de 2.
La sous-requête peut faire partie d'une expression. Si c'est un opérande d'une fonction, n'oubliez pas les parenthèses.
Par exemple :
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.