SQL Server
Consultas Multitabla
HASTA EL MOMENTO
HABÍAMOS TRABAJADO CON
CONSULTAS QUE
Consultas INVOLUCRABAN UNA SOLA
TABLA, AHORA VEREMOS
Multitabla COMO CREAR CONSULTAS
QUE OBTIENEN DATOS DE
DIFERENTES TABLAS.
Operaciones de Álgebra Relacional
implementadas en Transact-SQL
La unión UNION
La diferencia EXCEPT
La intersección INTERSECT
El producto cartesiano CROSS JOIN
La composición interna INNER JOIN
La composición externa LEFT JOIN, RIGHT JOIN Y FULL JOIN
Consulta 1
UNION ALL
Operador Union:
Unión de 2 Consulta 2
tablas.
Consiste en tomar dos tablas y
obtener una tabla con las filas de
las dos tablas.
En el resultado aparecerán las filas
de una tabla y, a continuación, las
filas de la otra tabla.
Para poder realizar la operación, las
dos tablas tienen que tener el
mismo esquema (mismo número de
columnas y tipos compatibles) y la
tabla resultante hereda los Nota: si incluye ALL incluye todos lo
encabezados de la primera tabla.
registros incluyendo los repetidos.
Consulta 1 Consulta 2
Oficina Ciudad Oficina Ciudad
1 Monterrey 7 Houston
8 Los Ángeles
2 Guadalajara
10 San Francisco
3 Saltillo
16 Chicago
Ejemplo
SELECT Oficina, Ciudad
Oficina Ciudad
FROM SucMexico 1 Monterrey
UNION 2 Guadalajara
SELECT Oficina, Ciudad 3 Saltillo
FROM SucEua 7 Houston
8 Los Ángeles
10 San Francisco
16 Chicago
Primero pone todas las oficinas de México y después las
de Estados Unidos.
Consulta 1
Operador
Except: la EXCEPT
diferencia Consulta 2
Aparecen en la tabla
resultante las filas de la
primera consulta que
no aparecen en la
segunda.
Las condiciones son las
mismas que las de la
unión.
Consulta 1 Consulta 2
Oficina Ciudad Oficina Ciudad
1 Monterrey 2 Guadalajara
2 Guadalajara 7 Houston
Ejemplo 3 Saltillo
8 Los Ángeles
10 San Francisco
10 San Francisco
SELECT Oficina, Ciudad 16 Chicago
FROM Sucursales1
EXCEPT
SELECT Oficina, Ciudad
FROM Sucursales2; Oficina Ciudad
1 Monterrey
3 Saltillo
Todas las oficinas de la consulta 1 menos las que se
encuentran en la consulta 2.
Consulta 1
INTERSECT
Operador Consulta 2
Intersect: la
intersección
Aparecen en la tabla
resultante las filas que
aparecen en la
primera consulta y en
la segunda.
Las condiciones son las
mismas que las de la
unión.
Consulta 1 Consulta 2
Oficina Ciudad Oficina Ciudad
1 Monterrey 2 Guadalajara
2 Guadalajara 7 Houston
Ejemplo 3 Saltillo
8 Los Ángeles
10 San Francisco
10 San Francisco
SELECT Oficina, Ciudad 16 Chicago
FROM Sucursales1
INTERSECT
SELECT Oficina, Ciudad
FROM Sucursales2; Oficina Ciudad
2 Guadalajara
10 San Francisco
Todas las oficinas que aparecen en las de la consulta 1
y en la consulta 2.
HASTA AHORA HEMOS
OPERADO CON TABLAS QUE
Composición de TENÍAN EL MISMO ESQUEMA,
PERO MUCHAS VECES LO QUE
NECESITAMOS ES OBTENER
Tablas UNA TABLA QUE TENGA EN
UNA MISMA FILA DATOS DE
VARIAS TABLAS,
Cross Join:
Producto SELECT lista_de_campos
Cartesiano
FROM Tabla1 CROSS JOIN
El producto cartesiano Tabla 2
obtiene todas las posibles
concatenaciones de filas Ó
de la primera tabla con
filas de la segunda tabla.
SELECT lista_de_campos
Se indica escribiendo en FROM Tabla1, Tabla 2
la cláusula FROM los
nombres de las tablas
separados por una coma
o utilizando el operador
CROSS JOIN.
Empleados Oficinas
No. Empleado Nombre Oficina Ciudad
1 Pedro 200 Houston
300 Los Ángeles
Ejemplo 2
3
Luis
Teresa
125 San Francisco
166 Chicago
SELECT *
FROM Empleados
CROSS JOIN
No. Empleado Nombre Oficina Ciudad
Oficinas;
1 Pedro 200 Houston
Ó
1 Pedro 300 Los Ángeles
SELECT *
1 Pedro 125 San Francisco
FROM Empleados, Oficinas;
1 Pedro 166 Chicago
2 Luis 200 Houston
2 Luis 300 Los Ángeles
2 Luis 125 San Francisco
2 Luis 166 Chicago
Hace una combinación de todos los empleados contra
todas las oficinas.
SELECT lista_de_campos
FROM Tabla1 INNER JOIN
Inner Join:
Composición Tabla 2 ON Condición
Interna
Una composición
interna es aquella en la
que los valores de las
columnas que se están
combinando se
comparan mediante
un operador de
comparación.
Empleados Oficinas
No. Empleado Nombre Oficina Oficina Ciudad
1 Pedro 300 200 Houston
2 Luis 125 300 Los Ángeles
Ejemplo 3 Teresa 200 125 San Francisco
4 Andrés 300
SELECT [No. Empleado], 166 Chicago
5 Antonio Null
Nombre, [Link],
Ciudad
FROM Empleados INNER JOIN
Oficinas
No. Empleado Nombre Oficina Ciudad
ON [Link] =
[Link]; 1 Pedro 300 Los Ángeles
2 Luis 125 San Francisco
3 Teresa 200 Houston
4 Andrés 300 Los Ángeles
Cada empleado con su respectiva oficina y ciudad.
Los empleados sin oficina no aparecen así como las
oficinas que no están asignadas a un empleado.
Left, Right y Full
Outer Join:
Composición
Externa
SELECT lista_de_campos
La composición FROM Tabla1 {LEFT, RIGHT, FULL} [OUTER]
externa se escribe de JOIN
manera similar al INNER
JOIN indicando una Tabla 2 ON Condición
condición de
combinación pero en
el resultado se añaden
filas que no cumplen la La palabra OUTER es opcional, no añade
condición de funcionalidad alguna.
combinación.
SELECT lista_de_campos
FROM Tabla1 LEFT [OUTER] JOIN
Left Outer Join: Tabla 2 ON Condición
Composición
Externa
LEFT JOIN devuelve todas las
filas de la tabla izquierda
(tabla 1), con las filas
coincidentes en la tabla de la
derecha (Tabla 2).
El resultado es NULL en el
lado derecho, cuando no
hay ninguna coincidencia..
La palabra OUTER es opcional, no añade
funcionalidad alguna.
Empleados Oficinas
No. Empleado Nombre Oficina Oficina Ciudad
1 Pedro 300 200 Houston
2 Luis 125 300 Los Ángeles
Ejemplo 3 Teresa 200 125 San Francisco
4 Andrés 300
SELECT [No. Empleado], 166 Chicago
5 Antonio NULL
Nombre, [Link],
Ciudad
FROM Empleados LEFT JOIN
Oficinas
ON [Link] = No. Empleado Nombre Oficina Ciudad
[Link];
1 Pedro 300 Los Ángeles
2 Luis 125 San Francisco
3 Teresa 200 Houston
4 Andrés 300 Los Ángeles
5 Antonio NULL NULL
Aparecen empleados con su respectiva oficina y
empleados que no tienen oficina.
SELECT lista_de_campos
FROM Tabla1 RIGHT [OUTER] JOIN
Right Outer Join: Tabla 2 ON Condición
Composición
Externa
RIGHT JOIN devuelve todas
las filas de la tabla derecha
(tabla 2), con las filas
coincidentes en la tabla de la
izquierda (Tabla 1).
El resultado es NULL en el
lado izquierdo, cuando no
hay ninguna coincidencia..
La palabra OUTER es opcional, no añade
funcionalidad alguna.
Empleados Oficinas
No. Empleado Nombre Oficina Oficina Ciudad
1 Pedro 300 200 Houston
2 Luis 125 300 Los Ángeles
Ejemplo 3 Teresa 200 125 San Francisco
4 Andrés 300
SELECT [No. Empleado], 166 Chicago
5 Antonio NULL
Nombre, [Link],
Ciudad
FROM Empleados RIGHT JOIN
Oficinas
ON [Link] = No. Empleado Nombre Oficina Ciudad
[Link];
1 Pedro 300 Los Ángeles
2 Luis 125 San Francisco
3 Teresa 200 Houston
4 Andrés 300 Los Ángeles
NULL NULL 166 Chicago
Aparecen empleados con su respectiva oficina y las
oficinas que no están asignadas a algún empleado.
SELECT lista_de_campos
FROM Tabla1 Full [OUTER] JOIN
Full Outer Join: Tabla 2 ON Condición
Composición
Externa
FULL JOIN devuelve todas las
filas de la tabla izquierda
(tabla 1) y las filas de la tabla
de la derecha (Tabla 2).
El resultado es NULL en cada
lado correspondiente,
cuando no hay ninguna
coincidencia..
La palabra OUTER es opcional, no añade
funcionalidad alguna.
Empleados Oficinas
No. Empleado Nombre Oficina Oficina Ciudad
1 Pedro 300 200 Houston
2 Luis 125 300 Los Ángeles
3 Teresa 200 125 San Francisco
Ejemplo 4 Andrés 300 166 Chicago
5 Antonio NULL
SELECT [No. Empleado],
Nombre, [Link],
Ciudad
FROM Empleados FULL JOIN No. Empleado Nombre Oficina Ciudad
Oficinas
1 Pedro 300 Los Ángeles
ON [Link] =
[Link]; 2 Luis 125 San Francisco
3 Teresa 200 Houston
4 Andrés 300 Los Ángeles
5 Antonio NULL NULL
NULL NULL 166 Chicago
Aparecen empleados con su respectiva oficina, los
empleados que no tienen asignada oficina y las
oficinas que no están asignadas a algún empleado.
Referencia Bibliográfica
“Funciones básicas de Transact-SQL”
Curso SQL Sever
[Link]