Primero creamos 4 tablas:
Ahora hacemos esto con una subconsulta sin ninguna palabra clave:
Encontramos su clase por un compañero de clase llamado z1 y encontramos su nombre de clase por su ID de clase.
Escribamos el código a continuación:
mysql> select className from class where classId =
-> (select studentClassId from student where studentName = 'z1');
+-----------+
| className |
+-----------+
| 计算机1班 |
+-----------+
1 row in set (0.00 sec)
Este tipo de consulta consiste en ejecutar primero la consulta interna y luego la consulta externa.
Luego, veamos cómo usar in para completar la subconsulta:
En primer lugar, los 4 anteriores,
y luego completamos una tarea, cómo consultar los nombres de clase de z1, z3 y z4.
A continuación, completemos el código.
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 consulta interna de la consulta in puede devolver múltiples resultados y la consulta interna se ejecuta primero.
Por último, veamos cómo utilizar la subconsulta para completar la subconsulta:
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 tiene una característica, ejecuta la consulta externa primero, por lo que cuando usamos class.classId internamente, puede ser reconocido por la base de datos.
Si nuestro uso se utiliza en, se informará un error.
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
Debido a que in primero se ejecuta internamente, no se puede reconocer el class.classId dentro de in.