[MySQL] La sous-requête, dans, existe (explication détaillée)

Nous créons d'abord 4 tables :

insérez la description de l'image ici

Maintenant, nous faisons cela avec une sous-requête sans aucun mot-clé :

Nous trouvons sa classe par un camarade de classe nommé z1 et trouvons son nom de classe par son identifiant de classe.
Écrivons le code ci-dessous :

mysql> select className from class where classId =
    -> (select studentClassId from student where studentName = 'z1');
+-----------+
| className |
+-----------+
| 计算机1|
+-----------+
1 row in set (0.00 sec)

Ce type de requête consiste à exécuter d'abord la requête interne, puis la requête externe.

Voyons ensuite comment utiliser in pour compléter la sous-requête :

Tout d'abord, les 4 ci-dessus,
puis nous terminons une tâche, comment interroger les noms de classe de z1, z3 et z4.
Complétons ensuite le code

mysql> select className from class where classId in
    -> (select studentClassId from student where studentName = 'z1'
    -> or studentName = 'z3'
    -> or studentName = 'z4');
+-----------+
| className |
+-----------+
| 计算机1|
| 计算机2|
| 计算机3|
+-----------+
3 rows in set (0.00 sec)

La requête interne de la requête in peut renvoyer plusieurs résultats et la requête interne est exécutée en premier.

Enfin, voyons comment utiliser exists pour compléter la sous-requête :

mysql> select * from class where exists
    -> (select studentName from student where student.studentClassId =
    -> class.classId
    -> and student.studentClassId !=4);
+---------+-----------+
| classId | className |
+---------+-----------+
|       1 | 计算机1|
|       2 | 计算机2|
|       3 | 计算机3|
|       5 | 软件2|
|       6 | 大数据1|
|       7 | 大数据2|
+---------+-----------+
6 rows in set (0.00 sec)

existe a une fonctionnalité, il exécute d'abord la requête externe, donc lorsque nous utilisons class.classId en interne, il peut être reconnu par la base de données.
Si notre utilisation est utilisée dans in, une erreur sera signalée.

mysql> select * from class where in
    -> (select studentClassId from student where student.studentClassId =
    -> class.classId
    -> and student.studentClassId !=4);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in
(select studentClassId from student where student.studentClassId =
class.clas' at line 1

Étant donné que in est d'abord exécuté en interne, le class.classId à l'intérieur de in ne peut pas être reconnu.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_54130714/article/details/123201108
conseillé
Classement