La sous-requête de MySQL est une partie importante des requêtes multi-tables. Elle est souvent utilisée avec les requêtes de jointure et constitue la base des requêtes multi-tables. L'article suivant vous présentera les sous-requêtes, j'espère qu'il vous sera utile.
Qu'est-ce qu'une sous-requête ?
Sous-requête, également appelée requête interne. Lorsqu’une requête est une condition d’une autre requête, on parle de sous-requête. Les sous-requêtes peuvent utiliser plusieurs commandes simples pour créer de puissantes commandes composées. Les sous-requêtes sont le plus souvent utilisées dans la clause WHERE d'une commande SELECT-SQL.
Une sous-requête est une instruction SELECT imbriquée dans une instruction SELECT, SELECT…INTO, INSERT…INTO, DELETE ou UPDATE ou dans une autre sous-requête.
2. Classification des sous-requêtes
La sous-requête est divisée dans les catégories suivantes :
1. -query : return Un scalaire à valeur unique, dans sa forme la plus simple.
2. Sous-requête de colonne : l'ensemble de résultats renvoyé est composé de N lignes et d'une colonne.
3. Sous-requête de ligne : l'ensemble de résultats renvoyé est une ligne avec N colonnes.
4. Sous-requête de table : l'ensemble de résultats renvoyé est composé de N lignes et de N colonnes.
Opérateurs pouvant être utilisés : = > < >= <= <> ANY IN SOME ALL EXISTS
Une sous-requête renverra un scalaire (juste une valeur), une ligne, une colonne ou un tableau. Ces sous-requêtes sont appelées scalaires, ligne, sous-requêtes de colonnes et de tables.
Si la sous-requête renvoie une valeur scalaire (une seule valeur), alors la requête externe peut utiliser : =, >, <, >=, <= et <> ; si la sous-requête ne renvoie pas de valeur scalaire et que la requête externe utilise un opérateur de comparaison pour comparer le résultat de la sous-requête, une exception sera levée.
1. Sous-requête scalaire :
signifie que la sous-requête renvoie un scalaire avec une valeur unique, comme un nombre ou une chaîne, et est également la sous-requête la plus simple. formulaire de retour. Vous pouvez utiliser ces opérateurs = > < >= <= <>
pour comparer les résultats scalaires des sous-requêtes. Habituellement, la position de la sous-requête est sur le côté droit de l'expression de comparaison
Exemple :
SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1) SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2) SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)
2. . Exemple de requête MySQL :
signifie que l'ensemble de résultats renvoyé par la sous-requête est composé de N lignes et d'une colonne. Les résultats sont généralement renvoyés à partir d'une requête sur un certain champ de la table.
Vous pouvez utiliser ces opérateurs = > < >= <= <>
pour comparer les résultats scalaires des sous-requêtes. Habituellement, la position de la sous-requête est sur le côté droit de la formule de comparaison
Vous pouvez utiliser IN
. Les opérateurs , ANY
, SOME
et ALL
ne peuvent pas être utilisés directement. Les opérateurs = > < >= <= <>
qui comparent les résultats scalaires ne peuvent pas être utilisés directement.
Exemple :
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2) SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
NOT IN est un alias de <>
Cas particulier :
Si table2 est une table vide, le résultat après ALL est VRAI
Si la sous-requête renvoie tel que (0, NULL, 1), bien que Si s1 est plus grand que les résultats renvoyés, mais qu'il y a des lignes vides, le résultat après ALL est INCONNU.
Remarque : dans le cas d'une table vide table2, les instructions suivantes renverront NULL :
SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2) SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
3. Sous-requête de ligne MySQL :
doigt Le Le jeu de résultats renvoyé par la requête est une ligne avec N colonnes. Le résultat de la sous-requête est généralement le jeu de résultats renvoyé en interrogeant une certaine ligne de données dans la table.
Exemple :
SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2) //注:(1,2) 等同于 row(1,2) SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)
4. Sous-requête de table MySQL :
signifie que l'ensemble de résultats renvoyé par la sous-requête est une donnée de table de N lignes et N colonnes.
Exemple :
SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!