[MySQL] Subconsulta, en, existe (explicación detallada)

Primero creamos 4 tablas:

inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_54130714/article/details/123201108
Recomendado
Clasificación