Les instructions Select qui apparaissent dans d'autres instructions sont appelées sous-requêtes ou requêtes internes ; les instructions de requête externes sont appelées requêtes principales ou requêtes externes
-- 子查询 -- 查询的条件来自于另一查询的结果 SELECT * FROM t_user WHERE number=(SELECT number FROM t_user WHERE NAME='张三')
Bien sûr, les sous-requêtes ont également des types, qui sont divisés dans les types suivants :
Scalaire. sous-requête (l'ensemble de résultats n'a qu'une seule ligne et une colonne)
sous-requête de colonne (l'ensemble de résultats n'a qu'une seule colonne et plusieurs lignes)
sous-requête de ligne (l'ensemble de résultats a une ligne et plusieurs colonnes) (moins )
sous-requête de table (les ensembles de résultats sont généralement multi-lignes et multi-colonnes)
Ici, nous prenons la nouvelle table t_user comme exemple
Il convient de noter que : La classification ici est basée sur les résultats de la sous-requête intégrée, comme le sql ci-dessus L'instruction est une sous-requête scalaire
Le résultat de la sous-requête n'a qu'une seule ligne et une colonne
Ensuite, nous discuterons en fonction de la position de la sous-requête dans le SQL instruction :
Après la sélection : seule la sous-requête scalaire est prise en charge
-- select语句后面,将t1查询出的结果作为子查询的条件 SELECT t1.number, (SELECT NAME FROM t_user t2 WHERE t1.name = t2.name) FROM t_user t1
Résultats de la requête :
insérer dans, après mise à jour et suppression :
insérer dans est utilisé pour insérer des données dans la table, elle peut donc être suivie par sous-requêtes de colonne et sous-requêtes de table
-- insert into 后跟子查询 INSERT INTO t_user(number,NAME,age,birthday,weight,sex,opertime) SELECT number,NAME,age,birthday,weight,sex,NOW() FROM t_user WHERE id=3
Ce qui doit être noté ici, c'est la mise à jour et la suppression
UPDATE t_user SET NAME='abc' WHERE number=(SELECT number FROM t_user WHEREweight=110)
DELETE FROM t_user WHERE id= (SELECT id FROM t_user WHERE id=7)
Les deux sql ci-dessus, mysql sont Nous ne sommes pas autorisés à l'exécuter comme ceci :
Le mécanisme sous-jacent de mysql nous empêche de modifier la structure de cette table lorsque utiliser cette table
En d'autres termes, la sous-requête ne peut pas interroger la table en cours d'exploitation
Après où : elle peut être suivie par une sous-requête scalaire, une sous-requête de colonne, une sous-requête de ligne
-- where后跟标量子查询 -- 查询体重最大的人信息 SELECT * FROM t_user WHERE weight=(SELECT MAX(weight) FROM t_user) -- where后跟列子查询 -- 查询体重大于或等于130的人信息 SELECT * FROM t_user WHERE weight IN (SELECT weight FROM t_user WHERE weight>=130) -- where后跟行子查询 -- 查询年龄最大,体重最大的人的信息 SELECT * FROM t_user WHERE (age,weight) = (SELECT MAX(age),MAX(weight) FROM t_user)
Après par : elle peut être suivie par une table. sous-requête
Le résultat de la requête de mots de table est constitué de plusieurs lignes et colonnes, c'est-à-dire une table
-- 表子查询 SELECT t.age FROM (SELECT age,weight FROM t_user)t
Le résultat :
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!