Académique Documents
Professionnel Documents
Culture Documents
Modalidad Semipresencial
Tabla de Contenidos
DESCRIPCIÓN
Con Transact/SQL podemos crear los procesos más importantes que podemos llevar a cabo en una
base de datos que son las consultas de los datos. De nada serviría una base de datos si no pudiéramos
consultarla. Es además la operación que efectuaremos con mayor frecuencia, para poder realizar
estas consultas, utilizamos el Lenguaje Manipulador de Datos (DML). Conocidos los fundamentos
básicos del comando SELECT, y está familiarizado con varias de sus cláusulas, en el presente vamos
a aprender técnicas de consultas más avanzadas. Una de estas técnicas es la de combinar el
contenido de una o más tablas para producir un conjunto de resultados que incorpore filas y
columnas de cada tabla. Otra técnica es la de agrupar los datos para obtener, desde un conjunto de
filas, datos agrupados.
CAPACIDAD
Diseña consultas con criterios de los datos existentes de las tablas, agrupa y resume datos
utilizando Transact SQL
Diseño de consultas que recuperan y modifican datos a través de subconsultas.
TEMÁTICA
Consultas agregadas
Uso del GROUP BY
Uso de COMPUTE y COMPUTE BY
Definición de JOIN
Consultas INNER JOIN
Consultas OUTER JOIN
Consultas CROSS JOIN
Consultas de otras consultas
1. CONSULTAS A VARIAS TABLAS
La sentencia JOIN en el lenguaje de consulta, permite combinar registros de dos o más tablas en
una base de datos relacional. La sentencia JOIN se pueden especificar en las cláusulas FROM o
WHERE, aunque se recomienda que se especifiquen en la cláusula FROM
Las consultas combinadas pueden ser de tres tipos:
Combinación interna - join
Combinación externa – outer
Combinación cruzada – cross
Con esta operación, se calcula el producto cruzado de los registros de dos tablas, pero solo
permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se
especifican. La cláusula INNER JOIN permite la combinación de los registros de las tablas,
comparando los valores de la columna específica en ambas tablas. Cuando no existe esta
correspondencia, el registro no se muestra.
Se combinan los registros de la tabla Empleados con la tabla Categorías, pero sólo van a permanecer
los registros que satisfagan la condición especificada. Podemos graficar este ejemplo con un
diagrama de Venn:
Esta combinación interna se conoce como una combinación equivalente. Devuelve todas las
columnas de ambas tablas y sólo devuelve las filas en las que haya un valor igual en la columna de
la combinación. Es equivalente a la siguiente consulta:
Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro
equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro
que le corresponda. Este tipo de operación se subdivide dependiendo de la tabla a la cual se le
admitirán los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha
o combinación completa.
SQL Server utiliza las siguientes palabras clave para las combinaciones externas
especificadas en una cláusula FROM:
Ejemplo: El resultado que produce este JOIN son todas las filas de la tabla que se encuentre a la
izquierda, sin importar si coinciden con las filas de la derecha.
Si lo que buscamos es obtener los empleados que no poseen ninguna categoría asignada, tenemos
que agregar la cláusula WHERE.
Ejemplo: Mostrar los registros de los clientes que han solicitado pedidos y aquellos clientes que
aún no han registrado pedidos
Ejemplo: Obtener todas las filas de la tabla derecha, sin importar si coinciden con las de la tabla de
la izquierda.
Ahora, si queremos las categorías que no posean ningún empleado, deberemos hacer lo siguiente:
Ejemplo: Mostrar los pedidos registrados por los productos, incluya los productos que aún no se
ha registrado en algún pedido.
FUNCIONES AGREGADAS
Las funciones agregadas calculan valores sumarios a partir de datos de una columna concreta. Las
funciones agregadas se pueden aplicar a todas las filas de una tabla, a un subconjunto de la tabla
especificada por una cláusula WHERE o a uno o más grupos de filas de la tabla. De cada conjunto
de filas al que se aplica una función agregada se genera un solo valor.
A continuación, detallamos la sintaxis y resultados de las funciones agregadas:
Las funciones SUM y AVG sólo pueden utilizarse con columnas numéricas: int, smallint , tinyint,
decimal, numeric, float y Money. Las funciones MIN y MAX no pueden usarse con tipos de datos
bit.
Las funciones agregadas distintas de COUNT(*) no pueden utilizarse con los tipos de datos text e
image.
La palabra clave DISTINCT es opcional con SUM, AVG y COUNT, y no se permite con MIN, MAX
ni COUNT (*). Si utiliza DISTINCT, el argumento no puede incluir una expresión aritmética, sólo
debe componerse de un nombre de columna, esta palabra clave aparece entre paréntesis y antes
del nombre de la columna.
2
FUNCIÓN AVG
La función AVG () calcula la media aritmética de un conjunto de valores en un campo específico de
la consulta.
La media calcula por la función AVG es la media aritmética (la suma de los valores dividido por el
número de valores).
La función AVG no incluye ningún campo NULL en el cálculo.
La función MAX (expr) y la función MIN (expr) devuelven el máximo o mínimo valor de un conjunto
de valores contenidos en un campo específico de una consulta. La expresión (expr) es el campo
sobre el que se desea realizar el cálculo; expr pueden incluir el nombre de un campo de una tabla,
una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de
las funciones agregadas de SQL).
FUNCIÓN SUM
La función SUM (expr) retorna la suma del conjunto de valores contenido en un campo específico
de una consulta.
La expresión (expr) representa el nombre del campo que contiene los datos que desean sumarse o
una expresión que realiza un cálculo utilizando los datos de dichos campos. Ejemplo: Mostrar la
suma de los pedidos registrados en este año.
3
1.6. USO DE LA CLAUSULA GROUP BY
Agrupa un conjunto de filas seleccionado en un conjunto de filas de resumen por los valores de una
o más columnas o expresiones de SQL Server 2014.
La cláusula GROUP BY se utiliza en las instrucciones SELECT para dividir la salida de una tabla en
grupos. Puede formar grupos según uno o varios nombres de columna, o según los resultados de
las columnas calculadas utilizando tipos de datos numéricos en una expresión.
La cláusula GROUP BY aparece casi siempre en instrucciones que también incluyen funciones
agregadas, en cuyo caso el agregado genera un valor para cada grupo. A estos valores se les llama
agregados vectoriales. Un agregado escalar es un solo valor generado por una función agregada sin
una cláusula GROUP BY.
Los valores sumarios (agregados vectoriales) generados por las instrucciones SELECT con agregados
y una cláusula GROUP BY aparecen como columnas en cada fila de los resultados.
Si incluye la cláusula WHERE en una consulta agregada, ésta se aplica antes de calcular el valor o la
función agregada.
Ejemplo: Mostrar la suma de pedidos registrados por cada cliente en el año 2014.
4
1.7. USO DE LAS CLAUSULAS COMPUTE Y COMPUTE BY
Una cláusula COMPUTE BY permite ver las filas de detalle y de resumen con una instrucción SELECT.
Puede calcular valores de resumen para subgrupos, o un valor de resumen para el conjunto
completo de resultados.
La cláusula COMPUTE toma la siguiente información:
La palabra clave opcional BY. Calcula el agregado de fila especificado en una base por
columna.
Un nombre de función de agregado de fila. Incluye SUM, AVG, MIN, MAX o COUNT.
Una columna en la que realizar la función de agregado de fila.
En la siguiente instrucción SELECT se utiliza una cláusula COMPUTE simple para crear el total general
de precios de las unidades y descuentos de la tabla SalesOrderDetail:
3. CONSULTAS ANIDADAS
Ejemplo: Utilizar una subconsulta con la idea de listar a todos los inquilinos que tienen hermanos:
5
Se llama también subconsulta a una consulta o selección interna, mientras que la instrucción que
contiene una subconsulta también es conocida como consulta o selección externa.
En Transact SQL, normalmente no hay diferencias de rendimiento entre una instrucción que incluya
una subconsulta y una versión equivalente que no lo haga. Sin embargo, en algunos casos en los
que se debe comprobar la existencia de algo, una combinación produce mejores resultados. De lo
contrario, la consulta anidada debe ser procesada para cada resultado de la consulta externa con
el fin de asegurar la eliminación de los duplicados. En tales casos, la utilización de combinaciones
produciría los mejores resultados.
Ejemplo: Mostrar una subconsulta SELECT y una combinación SELECT que devuelve el mismo
conjunto de resultados:
Una subconsulta anidada en la instrucción externa SELECT tiene los siguientes componentes:
Una consulta SELECT normal, que incluye los componentes normales de la lista de
selección.
Una cláusula normal FROM que incluye uno o más nombres de tablas o vistas.
Una cláusula opcional WHERE.
Una cláusula opcional GROUP BY.
Una cláusula opcional HAVING.
La consulta SELECT de una subconsulta se incluye siempre entre paréntesis. No puede incluir una
cláusula COMPUTE y sólo puede incluir una cláusula ORDER BY cuando se especifica también
una cláusula TOP.
Una subconsulta puede anidarse dentro de la cláusula WHERE o HAVING de una instrucción
externa SELECT, INSERT, UPDATE o DELETE, o dentro de otra subconsulta.
Las instrucciones que incluyen una subconsulta normalmente tienen uno de estos formatos:
WHERE expresión [NOT] IN (subconsulta)
WHERE expresión_de_comparacion [ANY | ALL] (subconsulta)
WHERE [NOT] EXISTS (subconsulta)
6
Ejemplo lista a los edificios que tengan departamentos desocupados:
El siguiente ejemplo lista a los propietarios que han firmado contratos de alquiler.
Ejemplo: Esta consulta busca el código del contrato y la fecha de firma del mismo para todos
aquellos contratos suscritos con inquilinos con estado civil soltero.
Ejemplo: Queremos saber la lista de empleados cuyo salario supere el salario medio. En primer
lugar, tendríamos que averiguar el importe del salario medio:
7
Y luego aplicar la consulta para encontrar el salario medio: