Consulta de unión multirrelacional.
Anteriormente dijimos que hay varias tablas básicas en la base de datos y que se almacenan diferentes datos en cada tabla. Lo mismo es cierto para los ejemplos de varias operaciones de consulta que presentamos anteriormente, como la tabla de relaciones de estudiantes, la tabla de relaciones de profesores, la tabla de relaciones de cursos, la tabla de relaciones de selección de cursos y la tabla de relaciones de enseñanza. Los usuarios a menudo tienen la necesidad de usar los datos en varias tablas para combinar y extraer información. Si un proceso de consulta necesita operar en varias tablas, se denomina consulta de combinación. La tabla de resultados de la consulta de conexión se denomina conexión entre las tablas. La consulta de conexión en realidad consulta los datos a través de la correlación de las columnas comunes entre las tablas. La conexión entre las tablas de datos se refleja en los valores de campo de las tablas. Este tipo de campo se denomina campo de conexión. El propósito de la operación de conexión es conectar varias tablas a través de las condiciones agregadas al campo de conexión para consultar datos de varias tablas. Las consultas involucradas
en el lenguaje estándar de bases de datos relacionales SQL y el sistema de administración de bases de datos relacionales SQL Server (3) se realizan todas en una tabla. Cuando la consulta involucra dos o más tablas al mismo tiempo, se denomina consulta de combinación.
Unir la estructura de la consulta.
Hay dos formas de conectarse entre tablas:
- Cuando se conectan filas que satisfacen determinadas condiciones entre tablas, la
FROM
cláusula indica el nombre de la tabla a conectar y la cláusula indica el nombreWHERE
de la columna a conectar y sus condiciones de conexión. - Use palabras clave
JOIN
para conectarse, y los métodos de conexión específicos se dividen en los siguientes tipos:
① 【INNER JOIN
】 La conexión interna muestra registros elegibles, que también es el método predeterminado;
② 【LEFT (OUTER) JOIN
】 La conexión externa izquierda se usa para mostrar filas de datos elegibles y la tabla de la izquierda no cumple con las condiciones de la fila de datos, esta vez en la fila de datos de la derechaNULL
se mostrará.
③ [RIGHT (OUTER) JOIN
] para mostrar filas de datos calificadas de unión externa derecha y la tabla derecha no cumple las condiciones de las líneas de datos, las líneas de datos se dejarán en este momento paraNULL
mostrarse.
④ [FULL (OUTER) JOIN
] que se muestran filas de datos calificados y la tabla a la izquierda y derecha de la tabla no cumple las condiciones de las filas de datos, entoncesNULL
se mostrará la falta de datos en la línea de datos .
⑤ 【CROSS JOIN
】 Haga coincidir cada registro de una tabla con cada registro de otra tabla en una nueva fila de datos.
Además, debe tenerse en cuenta que al colocar JOIN
palabras clave en FROM
cláusulas, debe haber palabras clave ON
correspondientes a ellas para obtener las condiciones de conexión.
Consulta de unión interna.
Primero, damos un ejemplo, usando diferentes métodos para lograr la función de consulta:
[Ejemplo] Consulte el número de curso del curso impartido por el profesor Liu Wei y pida que se indique el número de profesor y el nombre del profesor Liu Wei.
Método 1:
SELECT T.TNo,TN,CNo
FROM T,TC
WHERE T.TNo=TC.TNo AND TN='刘伟'
Aquí T.TNo=TC.TNo
las condiciones de conexión, TNo
deben estar conectadas con el campo de prefijo de la tabla, el campo de referencia, que es debido T
y la TC
tabla tiene TNo
los campos mostrados que deben distinguirse. TN='刘伟'
Es la condición de consulta, en el proceso de consulta anterior se conecta la T
tabla y las filas con los mismos campos en la TC
tabla TNo
, luego las TN='刘伟'
filas seleccionadas y finalmente se realiza la TNo,TN,CNo
operación de proyección para obtener el resultado.
Método 2:
SELECT T.TNo,TN,CNo
FROM T INNER JOIN TC
ON T.TNo=TC.TNo
WHERE TN='刘伟'
La diferencia entre el Método 2 y el Método 1 son en realidad solo dos formas de escribir consultas de combinación internas. La última FROM
especifica la tabla que se unirá en la WHERE
cláusula y coloca la condición de combinación en la cláusula; mientras que la primera usa JOIN
palabras clave para especificar la combinación. Table, y las condiciones de conexión se ON
indican mediante palabras clave.
Método 3 (que involucra subconsultas):
SELECT R1.TNo,R2.TN,R1.CNo
FROM
(
SELECT TNo,CNo
FROM TC
) AS R1 INNER JOIN
(
SELECT TNo,TN
FROM T
WHERE TN='刘伟'
) AS R2
ON R1.TNo=R2.TNo
Para ser honesto, es un poco más una pérdida de lo que se usa una subconsulta para usar una subconsulta. En cuanto a las subconsultas, las presentaremos más adelante.
[Ejemplo] Consultar ID de alumno, nombre, nombre del curso y calificaciones de todos los alumnos que eligen el curso.
SELECT S.SNo,SN,CN,Score
FROM S,C,SC
WHERE S.SNo=SC.SNo AND SC.CNo=C.CNo
Esta pregunta implica la conexión de tres tablas y la WHERE
cláusula contiene dos condiciones de conexión.
[Ejemplo] Consultar el número de curso, el nombre del curso y el número de cursos para cada curso.
SELECT SC.CNo,CN,COUNT(SC.CNo) AS StudentNumber
FROM SC,C
WHERE SC.CNo=C.CNo
GROUP BY SC.CNo,CN
Vale la pena señalar que en la GROUP BY
cláusula, debe agrupar por los dos campos CNo y CN; de lo contrario, el sistema dará un mensaje de error: la
columna'C.CN 'en la lista de selección no es válida porque la columna no está incluida en la función agregada o GRUPO BY cláusula. Para obtener más información, puede consultar este artículo .
Consulta de combinación externa.
En la consulta de combinación interna anterior, sin importar el FROM...WHERE
formulario o el INNER JOIN...ON
formulario, las tuplas que no cumplan con las condiciones de combinación no se mostrarán. En la consulta [ejemplo], la identificación del estudiante, el nombre, el nombre del curso y las calificaciones de todos los estudiantes electivos . S6 Wu Li no eligió ningún curso, por lo que no habría información sobre ella. (La tabla de relaciones mencionada se basa en "Principios de base de datos y tutorial de aplicación" -Chen Zhibo-4th Edition-Page 27). En la conexión externa, las tablas que participan en la conexión se dividen en maestra y esclava, y cada fila de datos en la tabla maestra se usa para hacer coincidir las columnas de datos de la tabla esclava. Los datos que cumplan con las condiciones de conexión se devolverán directamente al conjunto de resultados; y aquellas columnas que no cumplan con las condiciones de conexión se rellenarán con NULL y luego se devolverán al conjunto de resultados (los datos de tipo de bit tienen excepciones, porque el bit no permite valores NULL, por lo que Se rellenará con 0 y luego se devolverá al conjunto de resultados).
Las combinaciones externas se distinguen por la dirección en la que se encuentra la tabla principal. La tabla principal de la izquierda se denomina combinación externa izquierda y la tabla principal de la derecha se denomina combinación externa derecha.
[Ejemplo] Consultar la identificación del estudiante, el nombre, el nombre del curso y las calificaciones de todos los estudiantes. (La información de selección de cursos y los resultados de los estudiantes que no han seleccionado cursos se muestran como NULL)
SELECT S.SNo,SN,CN,Score
FROM S
LEFT OUTER JOIN SC
ON S.SNo=SC.SNo
LEFT OUTER JOIN C
ON SC.CNo=C.CNo
Haga una comparación con la consulta de combinación interna mencionada anteriormente:
SELECT S.SNo,SN,CN,Score
FROM S,C,SC
WHERE S.SNo=SC.SNo AND SC.CNo=C.CNo
Consulta cruzada.
La consulta cruzada CROSS JOIN
no tiene ningún requisito para las tablas unidas.
[Ejemplo] Consulta cruzada la tabla de estudiantes S y la tabla de currículo C.
SELECT *
FROM S CROSS JOIN C
El resultado de la consulta anterior es combinar cada registro en la tabla de estudiantes S y cada registro en la tabla del curso C en una nueva fila de datos. El número de tuplas en el conjunto de resultados es el producto de los dos y el número de columnas es la suma de los dos.
Consulta de autounión.
Cuando una mesa está conectada consigo misma, se denomina autoconexión de la mesa.
[Ejemplo] Consultar el nombre y el salario de todos los maestros cuyo salario sea superior al del maestro Liu Wei y el salario del maestro Liu Wei.
Método 1:
SELECT X.TN,X.Sal AS Sal_a,Y.Sal AS Sal_b
FROM T AS X, T AS Y
WHERE Y.TN='刘伟' AND X.Sal>Y.Sal
Método 2:
SELECT X.TN,X.Sal AS Sal_a,Y.Sal AS Sal_b
FROM T AS X INNER JOIN T AS Y
ON Y.TN='刘伟' AND X.Sal>Y.Sal
Método 3:
SELECT R1.TN,R1.Sal,R2.Sal
FROM
(SELECT TN,Sal FROM T) AS R1
INNER JOIN
(SELECT Sal FROM T WHERE TN ='刘伟') AS R2
ON R1.Sal>R2.Sal