Está en la página 1de 16

Implementación de base de datos con

Microsoft SQL Server

Lenguaje de Manipulación de Datos

Luis Dávila Hurtado


Consultando múltiples tablas
1. Reuniendo datos desde múltiples
tablas
2. Uniendo múltiples conjuntos de
resultados
3. Creando una tabla desde un conjunto
de resultados
Una reunión:
Introducción a reuniones
• Selecciona columnas específicas desde múltiples tablas:
– La palabra clave JOIN especifica que tablas son
reunidas y cómo reunirlas
– La palabra clave ON especifica la condición de
reunión

• Las consultas de dos o más tablas producen un conjunto


de resultados
– Use clave primaria y claves foráneas como
condiciones de reunión
– Use columnas comunes para reunir tablas
Usando subconsultas

• Encerrar las subconsultas entre paréntesis


• Use sólo una expresión o nombre de columna en la
lista de selección
• Use subconsultas en lugar de una expresión
• No puede usar subconsultas en columnas que
contienen tipos de datos text e image
• No hay límite para el nivel de subconsultas
Consultas Anidadas. Retornando un solo valor
• La subconsulta remplaza la expresión en:
– En la lista de selección
– En la cláusula WHERE se usa un operador de
comparación
Muestra los datos de los empleados que ganan un salario
igual al menor salario pagado por el departamento número 2.
SELECT * FROM Empleado
WHERE salario_Emp = (SELECT MIN(salario_Emp) FROM Empleado
WHERE numero_Dep=2)
Muestra los datos de los dependientes que han nacido el
mismo año que el empleado más antiguo de la compañía.
SELECT * FROM Dependiente
WHERE YEAR(FechaNac_Depe)=(SELECT YEAR(MIN(FechaIng_Emp))
FROM Empleado)
Consultas Anidadas: Retornando una
lista de valores
• La subconsulta remplaza la expresión en:
– En la cláusula WHERE se usa la palabra clave IN
Muestra qué empleados tienen dependientes.
SELECT * FROM empleado
WHERE Nss_Emp IN (SELECT Nss_Emp FROM dependiente)

Obtener los nombres de los departamentos en


los que trabajan empleados que dedican más
SELECT DISTINCT Nombre_Dep de 30 horas semanales a algún proyecto.
FROM Departamento D INNER JOIN Empleado E
ON D.numero_Dep = E.numero_Dep
WHERE E.Nss_Emp IN (SELECT E.Nss_Emp
FROM Empleado E INNER JOIN Trabaja T
ON E.Nss_Emp = T.Nss_Emp
WHERE HorasSem_Tra > 30)
Resumiendo datos
1. Usando funciones agregadas
2. Fundamentos de GROUP BY
3. Generando valores agregados dentro de
conjuntos de resultados
4. Usando la cláusula COMPUTE y COMPUTE BY
5. Listando los primeros n valores
Usando funciones agregadas
Funciones Descripción
AVG Promedio de valores en una expresión
numérica
COUNT Número de valores en una expresión
COUNT(*) Número de filas seleccionadas
MAX Máximo valor en la expresión
MIN Mínimo valor en la expresión
SUM Valores totales en una expresión numérica
STDEV Desviación estadística de todos los valores
STDEVP Desviación estadística de la población
VAR Varianza estadística de todos los valores
VARP Varianza estadística de todos los valores de la
población
Usando funciones agregadas
• Las principales funciones agregadas ignoran los
valores nulos
• La función COUNT(*) cuenta filas con valores nulos
Número de registros en la tabla Número de empleados con
empleado departamento asignado

SELECT COUNT(*) SELECT COUNT (numero_Dep)


FROM empleado FROM empleado

Mostrar el número de seguro social y apellido paterno de los empleados y el


número de dependientes de cada uno.

SELECT E.Nss_Emp, ApellidoPat_Emp,


COUNT(D.Nss_Emp) As NumeroDep
FROM Empleado As E INNER JOIN Dependiente As D
ON E.Nss_Emp = D.Nss_Emp
GROUP BY E.Nss_Emp, ApellidoPat_Emp
2. Fundamentos de GROUP BY (1/2)

SELECT CodProd, SUM(Cantidad)


AS CantidadTotal
SELECT CodProd, NumOrden, Cantidad FROM detalle
FROM detalle GROUP BY CodProd

CodProd NumOrden Cantidad CodProd CantidadTotal

1 1 5 1 15
1 1 10 2 35
2 1 10 3 45
2 2 25
3 1 15 CodProd CantidadTotal
3 2 30 2 35
Sólo las filas
que satisfacen
la cláusula SELECT CodProd, SUM(Cantidad)
WHERE son AS CantidadTotal
agrupadas
FROM detalle
WHERE CodProd = 2
GROUP BY CodProd
Fundamentos de GROUP BY (2/2)
SELECT CodProd, SUM(Cantidad)
SELECT CodProd, NumOrden, Cantidad AS CantidadTotal
FROM detalle FROM detalle
GROUP BY CodProd
CodProd NumOrden Cantidad
HAVING SUM(Cantidad) >= 30
1 1 5

1 1 10 CodProd CantidadTotal
2 1 10 2 35
2 2 25 3 45
3 1 15
3 2 30

HAVING especifica una condición de búsqueda de un grupo o agregado.


HAVING sólo se puede utilizar con la instrucción SELECT. Normalmente se
incluye en una cláusula GROUP BY. Cuando no se utiliza GROUP BY,
HAVING se comporta como la cláusula WHERE.
Listando los primeros n valores
• Lista sólo las primeros n filas de un conjunto de resultados
• Especifica el rango de valores en la cláusula ORDER BY
• Retorna “empates” si se utiliza WITH TIES
• Si también se especifica PERCENT, sólo se va a utilizar el primer n
por ciento de filas del conjunto de resultados.
SELECT TOP 3 Nombre_Emp, ApellidoPat_Emp, salario_Emp
FROM empleado
ORDER BY salario_Emp DESC
Los 3 primeros empleados con el más alto salario

SELECT TOP 3 WITH TIES Nombre_Emp, ApellidoPat_Emp, salario_Emp


FROM empleado Los 3 primeros empleados con el más alto salario.
ORDER BY salario_Emp DESC Se muestran otros empleados que tengan un
salario igual al tercero publicado.

SELECT TOP 5 PERCENT Nombre_Emp, ApellidoPat_Emp, salario_Emp


FROM empleado
ORDER BY salario_Emp DESC
El 5% de los empleados con más alto salario

También podría gustarte