Se utiliza una concatenación para combinar registros de más de una tabla. Las tablas se combinan en función de columnas / valores comunes de estas tablas.
Hay diferentes tipos de combinaciones disponibles.
Una combinación interna combina registros de varias tablas y devuelve los valores que existen en ambas tablas.
A continuación se muestra la sintaxis de la instrucción INNER JOIN.
SELECT col1, col2, col3…. FROM Table-1 INNER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
Considere la siguiente tabla de empleados y tabla de pagos.
Numero de empleado. | Nombre | Apellido | Fecha de Ingreso | Departamento No | Fecha de cumpleaños |
---|---|---|---|---|---|
101 | Miguel | James | 27/03/2005 | una | 01/05/1980 |
102 | Robert | Williams | 25/04/2007 | 2 | 05/03/1983 |
103 | Pedro | Paul | 21/03/2007 | 2 | 01/04/1983 |
104 | Alex | Stewart | 01/02/2008 | 2 | 06/11/1984 |
105 | Robert | James | 04.01.2008 | 3 | 01/12/1984 |
Numero de empleado. | Bruto | Retencion | Salario neto |
---|---|---|---|
101 | 40.000 | 4000 | 36.000 |
102 | 80.000 | 6000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5,000 | 70.000 |
La siguiente consulta une la tabla Empleado y la tabla Salario en la columna común EmployeeNo. A cada tabla se le asigna un alias A y B, y las referencias de columna tienen un alias correcto.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A INNER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo);
Cuando se ejecuta la consulta anterior, devuelve los siguientes registros. El empleado 105 no se incluye en el resultado porque no tiene registros coincidentes en la tabla Salario.
*** Query completed. 4 rows found. 3 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo NetPay ----------- ------------ ----------- 101 1 36000 102 2 74000 103 2 83000 104 2 70000
LEFT OUTER JOIN y RIGHT OUTER JOIN también combinan resultados de varias tablas.
CONEXIÓN EXTERIOR IZQUIERDA devuelve todos los registros de la tabla de la izquierda y solo devuelve los registros coincidentes de la tabla de la derecha.
CONEXIÓN EXTERIOR DERECHA devuelve todos los registros de la tabla de la derecha y solo devuelve las filas coincidentes de la tabla de la izquierda.
CONEXIÓN EXTERNA COMPLETA combina los resultados de las UNIONES EXTERIOR IZQUIERDA y EXTERIOR DERECHA. Devuelve filas coincidentes y no coincidentes de tablas unidas.
A continuación se muestra la sintaxis de la instrucción OUTER JOIN. Debe utilizar una de las opciones LEFT OUTER JOIN, RIGHT OUTER JOIN o FULL OUTER JOIN.
SELECT col1, col2, col3…. FROM Table-1 LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
Considere el siguiente ejemplo de una solicitud LEFT OUTER JOIN. Devuelve todos los registros de la tabla Empleado y los registros correspondientes de la tabla Salario.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A LEFT OUTER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo) ORDER BY A.EmployeeNo;
Cuando se ejecuta la consulta anterior, da el siguiente resultado. Para el empleado 105, el valor de NetPay es NULL porque no tiene registros coincidentes en la tabla Salario.
*** Query completed. 5 rows found. 3 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo NetPay ----------- ------------ ----------- 101 1 36000 102 2 74000 103 2 83000 104 2 70000 105 3 ?
Cross Join une cada fila de la tabla de la izquierda con cada fila de la tabla de la derecha.
A continuación se muestra la sintaxis de la instrucción CROSS JOIN.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay FROM Employee A CROSS JOIN Salary B WHERE A.EmployeeNo = 101 ORDER BY B.EmployeeNo;
Cuando se ejecuta la consulta anterior, da el siguiente resultado. EmployeeNo 101 de la tabla Employee está concatenado con cada registro de la tabla Salario.
*** Query completed. 4 rows found. 4 columns returned. *** Total elapsed time was 1 second. EmployeeNo DepartmentNo EmployeeNo NetPay ----------- ------------ ----------- ----------- 101 1 101 36000 101 1 104 70000 101 1 102 74000 101 1 103 83000
🚫