You are on page 1of 8

Combinacin interna (INNER JOIN) Con esta operacin se calcula el producto cruzado de todos los registros; as cada registro

en la tabla A es combinado con cada registro de la tabla B; pero slo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN ms utilizado por lo que es considerado el tipo de combinacin predeterminado. SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explcita usa la palabra JOIN, mientras que la segunda es implcita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaracin SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE. Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL. Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre algunas combinaciones, stas no se muestran; es decir que si el nmero de departamento de un empleado no coincide con los nmeros de departamento de la tabla Departamento, no se mostrar el empleado con su respectivo departamento en la tabla resultante. Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implcita (B). A. Ejemplo de la sentencia INNER JOIN explcita: SELECT Campos FROM empleado INNER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento B. Ejemplo de la sentencia INNER JOIN implcita: SELECT Campos FROM empleado, departamento WHERE empleado.IDDepartamento = departamento.IDDepartamento Resultados:

Empleado.Apell Empleado.IDdepartam departamento.NombreDeparta departamento.IDDeparta ido ento mento mento

Zolano Jordn Rbinson Steinberg Andrade

34 33 34 33 31

Produccin Ingeniera Produccin Ingeniera Ventas

34 33 34 33 31

El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de stos tiene registros correspondientes en la otra tabla. No existe un departamento con nmero 36 ni existe un empleado con nmero de departamento 35. A la combinacin que utiliza comparaciones dentro del predicado JOIN se le llama theta-join. C. Ejemplo de combinacin tipo theta: SELECT * FROM empleado INNER JOIN departamento ON empleado.IDDepartamento < departamento.IDDepartamento

de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN) El resultado de esta operacin siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda. La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. A diferencia del resultado presentado en los ejemplos A y B (de combinacin interna) donde no se mostraba el empleado cuyo departamento no exista; en el siguiente ejemplo se presentarn los

empleados con su respectivo departamento, e inclusive se presentar el empleado, cuyo departamento no existe. H. Ejemplo de tabla izquierda para la combinacin externa: SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento Empleado.Apel Empleado.IDDeparta lido mento Jordn Andrade Rbinson Zolano Gaspar Steinberg 33 31 34 34 36 33 Departamento.NombreDepart Departamento.IDDeparta amento mento Ingeniera Ventas Produccin Produccin NULL Ingeniera 33 31 34 34 NULL 33

de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN) Esta operacin es inversa a la anterior; el resultado de esta operacin siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha. La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. I. Ejemplo de tabla derecha para la combinacin externa: SELECT * FROM empleado RIGHT OUTER JOIN departamento

ON empleado.IDDepartamento = departamento.IDDepartamento Empleado.Ape Empleado.IDDeparta Departamento.NombreDepar Departamento.IDDepart llido mento tamento amento Zolano Jordn Rbinson Steinberg Andrade NULL 34 33 34 33 31 NULL Produccin Ingeniera Produccin Ingeniera Ventas Mercadeo 34 33 34 33 31 35

En este caso el rea de Mercadeo fue presentada en los resultados, aunque an no hay empleados registrados en dicha rea.

DECODE()

BETWEEN()

Para indicar que deseamos recuperar los registros segn el intervalo de valores de un campo emplearemos el operador Between cuya sintaxis es: campo [Not] Between valor1 And valor2 (la condicin Not es opcional) En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos en el intervalo. SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999; (Devuelve los pedidos realizados en la provincia de Madrid) SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional') FROM Editores;

(Devuelve el valor 'Provincial' si el cdigo postal se encuentra en el intervalo, 'Nacional' en caso contrario)

HAVING

La consulta SQL HAVING es utilizada junto con SELECT para especificar una condicin de bsqueda para un grupo. HAVING se comporta como WHERE, pero se aplica a grupos (las filas o tuplas en el conjunto de resultados representan grupos). La clusula WHERE se aplica a filas o tuplas individuales, NO a grupos. Veamos un ejemplo de una tabla de ventas con la siguiente informacin: VentaPrecio, NombreCliente Los datos son los siguientes: 250 - Juan 190 - Patricio 500 - Hernesto 420 - Susana 1000 - Maria 1000 - Juan 2000 - Patricio Para obtener el cuadro anterior, obtuvimos la lista de todos los clientes junto con el monto respectivo de la venta usando la siguiente sentencia SQL: SELECT NombreCliente, SUM(VentaPrecio) FROM Ventas GROUP BY NombreCliente; Ahora queremos seleccionar los clientes que han gastado ms de 1200, para hacer esto utilizamos la HAVING as: SELECT NombreCliente, SUM(VentaPrecio) FROM Ventas GROUP BY NombreCliente HAVING SUM(VentaPrecio) > 1200; El resultado ser: Patricio 2190 Juan 1250

UNION El propsito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido, UNION es parecido aJoin, ya que los dos se utilizan para informacin relacionada en mltiples tablas. Una restriccin de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. Tambin, cuando utilizamos UNION, slo se seleccionan valores distintos (similar a SELECT DISTINCT). La sintaxis es la siguiente: [Instruccin SQL 1] UNION [Instruccin SQL 2] Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information store_name Sales Date

Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999

Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999

Tabla Internet_Sales Date Sales

07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos saber de todas las fechas donde hay una operacin de venta. Para hacerlo, utilizamos la siguiente instruccin SQL:

SELECT Date FROM Store_Information UNION SELECT Date FROM Internet_Sales Resultado: Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999

You might also like