Habitualmente cuando necesitamos recuperar la información de una base de datos nos encontramos con que dicha información se encuentra repartida en varias tablas, referenciadas a través de varios códigos. De este modo si tuviéramos una tabla de ventas con un campo cliente, dicho campo contendría el código del cliente de la tabla de cliente.
Sin embargo está forma de almacenar la información no resulta muy útil a la hora de consultar los datos. SQL nos proporciona una forma fácil de mostrar la información repartida en varias tablas, las consultas combinadas o JOINS.
SENTENCIA JOIN
La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.
Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composición.
Combinación interna (INNER JOIN)
El INNER JOIN es un tipo de composición de tablas, que permite emparejar filas de distintas tablas de forma más eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento está indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo las filas que luego aparecen en el resultado.
La sintaxis es la siguiente:
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2
tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar. Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla.
campo1, campo2 son las columnas de emparejamiento. Observar que dentro de la cláusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto).
Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numéricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumérico y Long puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple y Doble. Además las columnas no pueden ser de tipo Memo ni OLE.
operadordecomparación representa cualquier operador de comparación ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condición de emparejamiento.
Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condición entre paréntesis.
ON empleado.ci = compra.codResp
SELECT *
ON empleado.ci > compra.codResp
DE TABLA IZQUIERDA (LEFT OUTER JOIN O LEFT JOIN)
El resultado de esta operación 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.
La sintaxis es la siguiente:
FROM tabla1 LEFT JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2
EJEMPLO:
ON empleado.ci = compra.codResp
DE TABLA DERECHA (RIGHT OUTER JOIN O RIGHT JOIN)
Esta operación es inversa a la anterior; el resultado de esta operación 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.
La sintaxis es la siguiente:
FROM tabla1 RIGTH JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2
EJEMPLO:
SELECT *
FROM empleado
right OUTER JOIN compra
ON empleado.ci = compra.codResp
Agrupamiento de registros y funciones agregadas
SQL permite combinar en un único registro, registros con valores idénticos en la lista de campos que se especifique. Una vez indicado por qué campo/s queremos agrupar la información, se pueden utilizar funciones de agregación que realizarán operaciones resumen sobre el grupo de registros (cuenta de registros, suma, media aritmética, máximo o mínimo, etc.).
Para indicar que se desea realizar un agrupamiento de registros se utiliza la cláusula Group By indicando aquellos campos por los que se desee agrupar la información.
Las funciones de agregación más importantes se muestran en la tabla, todas ellas, excepto COUNT(*) ignoran cualquier nulo en sus argumentos.
FUNCIÓN | DESCRIPCIÓN |
AVG | Utilizada para calcular el promedio de los valores de un campo determinado |
COUNT | Utilizada para devolver el número de registros de la selección |
SUM | Utilizada para devolver la suma de todos los valores de un campo determinado |
MAX | Utilizada para devolver el valor más alto de un campo especificado |
MIN | Utilizada para devolver el valor más bajo de un campo especificado |
Group By
Group By combina en un único registro los registros los valores idénticos en la lista de campos especificada.
Suele ir acompañada de alguna función resumen o de agregado. Si se incluye alguna función de agregado en el comando SELECT, se creará un valor resumen para cada registro si no se incluye ninguna función agregada los valores de resumen se omiten.
El orden de los nombres de los campos determinará los niveles de agrupamiento, del más alto al más bajo.
GROUP BY puede hacer referencia a cualquier campo de la tabla, incluso sin que esté presente en la cláusula SELECT siempre que el comando SELECT haga referencia a alguna función de agregado de SQL.
Todos los campos de la lista de campos de SELECT deben o bien incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada |
Los valores Null en los campos GROUP BY se agrupan y no se omiten, pero, no se evalúan en ninguna de las funciones SQL agregadas.
Para excluir aquellas filas que no se desea agrupar se utiliza la cláusula WHERE y, para excluir las filas una vez agrupadas se utiliza la cláusula HAVING.
Los datos tipo Memo, Objetos OLE, etc., no se pueden agrupar.
EJEMPLOS: FUNCIONES AGREDAS

SELECT SUM(precioCpra)AS TOTALFROM producto
SELECT MAX(precioCpra)AS MAXIMO FROM producto
SELECT
AVG(precioCpra)AS PROMEDIO FROM producto

SELECT
COUNT(precioCpra)AS CONTAR
FROM producto
SELECT MIN(precioCpra)AS MINIMO
FROM producto
EJEMPLOS: GROUP BY
SELECT max(precioCpra)AS maximoFROM productoGROUP BY precioCpra
SELECT max(precioCpra)AS maximo
FROM producto
GROUP BY precioCpra HAVING precioCpra>10 BY precioCpra