[Principio de base de datos] SQL de lenguaje estándar de bases de datos relacionales y sistema de gestión de bases de datos relacionales SQL Server (5)

Subconsulta.

Cuando WHEREincluimos un SELECT...FROM...WHERE...bloque de consulta en forma de cláusula , este bloque de consulta se denomina subconsulta o consulta anidada, y la declaración de consulta externa que lo contiene se denomina consulta principal. Las consultas anidadas pueden construir una serie de consultas simples en consultas complejas, mejorando las capacidades de consulta. El nivel de anidamiento de subconsultas puede alcanzar hasta 255 niveles.
Las consultas anidadas se procesan de adentro hacia afuera durante la ejecución. Cada subconsulta se completa antes de que se procese la consulta principal en el siguiente nivel, y la consulta principal necesita usar los resultados de la subconsulta.

Subconsulta ordinaria.

El orden de ejecución de la subconsulta ordinaria es: primero ejecute la subconsulta y luego use el resultado de la subconsulta como el valor de la condición de consulta de la consulta principal. La subconsulta ordinaria se ejecuta solo una vez y todos los registros involucrados en la consulta principal se comparan con los resultados de la consulta para determinar el conjunto de resultados de la consulta.

  • [Subconsulta ordinaria que devuelve un valor] Cuando el valor de retorno de la subconsulta es solo uno, puede usar un operador de comparación para conectar la consulta principal y la subconsulta.

[Ejemplo] Consulta el número y el nombre del profesor con el mismo título que el profesor Liu Wei.

SELECT TNo,TN
FROM T
WHERE Prof = (SELECT Prof FROM T WHERE TN='刘伟')

Esta consulta equivale a dividir la consulta en dos bloques de consulta para ejecutar, el primero en ejecutarse es la subconsulta:

SELECT Prof 
FROM T 
WHERE TN = '刘伟'

La subconsulta devuelve un valor, es decir, el título del profesor Liu Wei, "Conferencista", y luego usa esto como la condición de la consulta principal y luego ejecuta la consulta principal para encontrar el número del profesor y el nombre del profesor.

  • [Subconsulta ordinaria que devuelve un conjunto de valores] Si el valor de retorno de la subconsulta es más de uno, pero un conjunto, no podemos usar directamente operadores de comparación para expresar las condiciones de la consulta, pero necesitamos usar palabras clave ANYy ALL.

[Ejemplo] Consultar el nombre del profesor que imparte el curso C5.

SELECT TN 
FROM T
WHERE TNo = ANY (SELECT TNo FROM TC WHERE CNo='C5')

Primero ejecute la subconsulta para encontrar el conjunto de ID de profesor de los profesores que imparten el curso C5, y luego ejecute la consulta principal. Siempre que TNo sea igual a cualquier valor en el conjunto de resultados de la subconsulta, significa que el profesor está impartiendo el curso y se coloca el TN correspondiente Ingrese el resultado final de la consulta. Por supuesto, esta consulta también se puede realizar conectando:

SELECT TN
FROM T,TC
WHERE T.TNo=TC.TNo AND CNo='C5'

[Ejemplo] Consultar el nombre y salario de los profesores de otros departamentos cuyo sueldo sea superior al de un profesor del departamento de informática.

SELECT TN,Sal
FROM T
WHERE Sal > ANY(
				   SELECT Sal FROM T WHERE Dept='计算机'
				 ) 
	  AND Dept!='计算机'

Desde un punto de vista lógico, superior al salario de un profesor en el departamento de informática, solo necesita ser superior al salario mínimo del profesor en el departamento de informática, por lo que podemos utilizar el siguiente código:

SELECT TN,Sal
FROM T
WHERE SaL > (SELECT MIN(Sal) FROM T WHERE Dept='计算机')
	  AND Dept!='计算机'

Primero usamos la subconsulta y la MIN()función para encontrar el salario mínimo x del departamento de computación, y luego ejecutamos la consulta de los padres para encontrar el nombre y el salario del maestro cuyo salario es mayor que x entre los maestros que no están en el departamento de computación.

[Ejemplo] Consultar el nombre del profesor que imparte el curso C5 y utilizar palabras clave IN.

SELECT TN
FROM T
WHERE TNo IN(SELECT TNo FROM TC WHERE CNo='C5')

[Ejemplo] Consultar los nombres y salarios de los profesores de otros departamentos cuyo sueldo sea superior al de todos los profesores del departamento de informática.

SELECT TN,Sal
FROM T
WHERE Sal >ALL(SELECT SAL FROM T WHERE Dept = '计算机')
	  AND Dept!='计算机'

Como en el MIN()ejemplo anterior de uso de funciones de biblioteca , también podemos usar funciones de biblioteca MAX()para lograr un salario más alto que todos los profesores de informática:

SELECT TN,Sal
FROM T
WHERE Sal >(SELECT MAX(Sal) FROM T WHERE Dept='计算机')
	  AND Dept!='计算机'

Subconsultas relacionadas.

Todas las subconsultas anteriores son subconsultas ordinarias y no hay interacción entre estas subconsultas y la consulta principal, excepto que la consulta principal utilizará los resultados de la subconsulta como condición de consulta. Sin embargo, a veces las condiciones de consulta de una subconsulta deben hacer referencia a los valores de atributo en la tabla de consulta principal. A este tipo de consulta la llamamos subconsulta correlacionada.
En comparación con las subconsultas ordinarias, el orden de ejecución de las subconsultas correlacionadas es mucho más complicado. Primero, seleccionamos la primera fila de registros en la tabla de consulta principal, la subconsulta interna usa los valores de atributo relacionados en esta fila para realizar la consulta y luego la consulta principal determina si esta fila cumple con las condiciones de la consulta en función de los resultados devueltos por la subconsulta. Si se cumplen las condiciones, coloque esta fila en el conjunto de resultados de la consulta principal. Repita este proceso hasta que se procese cada fila de datos en la tabla de consulta principal. A partir de esto, también podemos ver que el número de ejecuciones de subconsultas relacionadas está determinado por el número de filas en la tabla de consultas principal.

[Ejemplo] Consultar el nombre del profesor que no imparte el curso C5.

SELECT DISTINCT TN
FROM T
WHERE 'C5'!=ALL(SELECT CNo FROM TC WHERE TNo=T.TNo)

!=ALLEl significado de no es igual a ningún valor en el resultado de la subconsulta y también se puede usar en su NOT INlugar. Describimos el proceso de esta subconsulta de correlación según la tabla de relaciones de la página 27. Primero seleccione una fila en la tabla de relaciones padre T, que es el registro [T1, Li Li, Hombre, 47, Profesor, 1500, 3000, Computadora], y luego ingrese la subconsulta, y el conjunto CNo encontrado es {C1, C4}, C5 no está incluido, por lo que el registro cumple con las condiciones de la consulta, lo proyectamos a la columna TN, es decir, el registro [Li Li] ingresa al conjunto de resultados final. El proceso posterior es el mismo. También puede
utilizar EXISTSpalabras clave para realizar subconsultas relacionadas, que EXISTSson cuantificadores que indican existencia. Las subconsultas con esta palabra clave no devolverán ningún resultado, pero un valor booleano de Verdadero o Falso.

[Ejemplo] Consultar el nombre del profesor que imparte el curso C5 y utilizar EXISTSpalabras clave.

SELECT TN
FROM T
WHERE EXISTS(SELECT * FROM TC WHERE TNo=T.TNo AND CNo='C5')

Cuando una fila en la tabla TC de la subconsulta cumple la condición, la consulta principal proyectará la tupla en la tabla T a la columna TN y la colocará en el conjunto de resultados.

[Ejemplo] Consulte el nombre del profesor que no impartió el curso C5 y utilice EXISTSpalabras clave.

SELECT TN
FROM T
WHERE (NOT EXISTS(SELECT * FROM TC WHERE TNo=T.TNo AND CNo='C5'))

[Ejemplo] Consultar los nombres de los alumnos que han realizado todos los cursos.

SELECT SN
FROM S
WHERE NOT EXISTS
(
	SELECT *
	FROM C
	WHERE NOT EXISTS
	(
		SELECT *
		FROM SC
		WHERE SNo=S.SNo AND CNo=C.CNo
	)
)	 

Los alumnos que han realizado todos los cursos también pueden entenderse como: Para este alumno x, no existe tal curso y, y no hay registro de la combinación de <x, y> en la tabla de selección de cursos SC.
Los datos se agregan a la tabla de relaciones en la página 27, de modo que efectivamente hay estudiantes que han tomado todos los cursos. La tabla se muestra a continuación. El estudiante S1 ha tomado los 7 cursos: Los
Inserte la descripción de la imagen aquí
resultados de ejecución son los siguientes:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44246009/article/details/108049756
Recomendado
Clasificación