Nous créons d'abord 4 tables :
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.