consulta de combinación
- Equijoins
- su conexión
- Combinación externa
- Múltiples uniones de tablas
En primer lugar, la conexión equivalente
- símbolo de la conexión
"="
Varios algoritmos conectados operativamente
- método de bucle anidado (nested-LOOP)
- Dos bucles for correspondiente a cuando la cantidad de datos no es eficiente
- En primer lugar encontramos la primera tupla en la Tabla 1, y luego atravesar la mesa desde el principio todas las tuplas 2. Después de la mesa de empalme y encontrar una tupla de la Tabla 2, Tabla 1 para encontrar la segunda tupla, a continuación, recorrer la tabla 2.
- Repitiendo la operación anterior, sabiendo todas las tuplas en la Tabla 1 se han procesado.
- Clasificar-algoritmo de combinación de mezcla (sort-merge)
- Comúnmente se usa en la variante equi-equivalente de un bucle anidado
- En primer lugar por la conexión atribuye la Tabla 1 y la Tabla 2
排序
- Establecer el punto puntero a una tupla en la Tabla 1 y la Tabla 2, en este caso
表1指针为参照
,表2扫描
si se cumplen las condiciones de conexión, los punteros de dos tuplas, y empalmar un movimiento. - Si no es así, lugares
表2指针为参照
,,表1扫描
(es decir, los libros de texto lo pone: vale menos después de que el puntero pasa una tupla.) - Repita los pasos anteriores (
核心:
Tabla 2 turnos tienen que puntero de exploración)
- índice de conexión (INDICE-JOIN)
好像很少用,网上关于它的信息很少
- También dé variantes equivalentes de bucle anidado
- Tabla 2 para la indexación de campo de conexión
- Para cada tupla de una tabla, seguido de la tabla 2 de consulta de índice.
En segundo lugar, la libre ligadura
- Una mesa conectado a su propia, es un conector especial
- Dado que la necesidad de una mesa
别名
para mostrar la diferencia - Dado que todos los nombres de los atributos son propiedad del mismo nombre, por lo que debe utilizar
别名前缀
.
Ejemplo 1 . Requisito previo directamente consulta de nombre de cada curso
SELECT FIRST.Cname , SECOND.Cname
FROM Course FIRST , Course SECOND
WHERE FIRST.Cpno=SECOND.Cno;
resultados:
En tercer lugar, la conexión externa
Conectado a la distinción conexión externa común :
- Salida sólo para cumplir con las condiciones de la tupla conexión general
- conexión externa a la tabla especificada como la conexión principal, el tema de la mesa no cumple con la tupla también juntos de salida (cómo decirlo ???)
- externa izquierda:
- Todo se enumeran a la izquierda en tuplas de la relación
- externa derecha
- Que aparece en las relaciones correctas en todas las tuplas
2 ejemplos:
//普通连接
SELECT Student.Sno,Sname, Cno
FROM Student , SC
WHERE Student.Sno = SC.Sno;
//左外连接
SELECT Student.Sno,Sname, Cno
FROM Student LEFT OUT JOIN SC ON
(Student.Sno = SC.Sno); //WHERE都省去了
这样写会出现 ‘OUT’ 不是可以识别的 join 选项 的报错。需要将OUT改成OUTER,或者将OUT去掉也行。
//左外连接 ,有些商业系统更简介的表达
SELECT Student.Sno,Sname, Cno
FROM Student , SC
WHERE Student.Sno (+)= SC.Sno;
En cuarto lugar, multi-mesa se une
- La conexión de dos o más tablas
** Ejemplo 3: consulta ** Cada número de estudiante, el nombre, el nombre y los resultados de los cursos electivos
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno;
En quinto lugar, consulta anidada
- restricciones de subconsulta: No se puede utilizar la cláusula ORDER BY, porque el resultado se utiliza para
consultas irrelevantes - Subconsulta no depende de la consulta externa, la capa de consulta por capa desde el interior hacia fuera
带IN谓词的子查询
[Ejemplo 3.55] consulta en el aprendizaje del estudiante con una línea "Liu Chen."
Método uno: Paso a paso para completar
① OK "Liu Chen" en el nombre del departamento:
SELECT Sdept
FROM Student
WHERE Sname= '刘晨';
Resultados: CS
Buscar todos los estudiantes CS que estudian en el Departamento de ②:
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept= 'CS';
Método dos: el primer paso para incrustar la condiciones de la consulta en la segunda etapa de la consulta
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname= '刘晨');
Método tres: autoligado
SELECT S1.Sno, S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept = S2.Sdept
AND S2.Sname = '刘晨';
- Subconsultas con operadores de comparación
cuando la consulta interna puede saber exactamente cuándo va a devolver un único valor de comparación disponibles (>, <, =,> =, <= ,! =, o <>).
En [Ejemplo 3.55], ya que un estudiante puede aprender sólo un sistema, que puede ser sustituido por = IN:
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept =
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
[Ejemplo 3.57] para identificar a cada estudiante por encima de su punto de calificación del curso número medio de cursos electivos.
SELECT Sno, Cno
FROM SC x
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
Subconsulta correlacionada : subconsulta consulta depende de la consulta de los padres
primero recuperar la primera tupla en las tablas de consulta externa, de acuerdo con su valor asociado a la capa interior y el procesamiento de consultas consulta interna, devuelve verdadero si la cláusula WHERE, esto se tiene en la tupla tabla de resultados. Y luego tome la siguiente tupla de la tabla externa. Este proceso se repite hasta que todos se han comprobado hasta la tabla externa.
Ejecución:
eliminar una tupla x SC de la consulta externa, el valor Sno (201,215,121) tupla x se transfiere a la consulta interna.
SELECT AVG(Grade)
FROM SC y
WHERE y.Sno='201215121‘;
ejecución de la consulta interna, el valor de 88 obtenido (aprox.), el valor utilizado en lugar de la consulta interna, la consulta externa para obtener:
SELECT Sno,Cno
FROM SC x
WHERE Grade >=88;
Ejecutar los resultados de la consulta en:
(201215121,1)
(201215121,3)
consulta externa busca entonces la siguiente tupla repita el paso anterior ① a ③, la capa SC exterior hasta que todas las tuplas procesados. Los resultados son los siguientes:
(201215121,1)
(201215121,3)
(201215122,2)