Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo especfico: Que el alumno aprenda a obtener datos de ms de una tabla, utilizando los diferentes mtodos disponibles, adems, a como realizar un resumen de la informacin empleando funciones de grupo
Qu es un JOIN? Qu es un producto cartesiano? Consultas de JOIN simple Utilizando Alias para las tablas Non- equijoin Recuperando registros no recuperados directamente Uniendo una tabla consigo misma. Funciones de grupo Clusula Group By Consultas ilegales utilizando funciones de grupo Clusula Having
Lenguajes de Consulta.
Qu es un JOIN?
Cuando se requieren datos de ms de una tabla de la base de datos, se utiliza una condicin de JOIN. Registros de una tabla pueden ser unidos a registros de otra tabla de acuerdo a valores comunes existentes en las columnas correspondientes, esto es, se unen a travs de las columnas de llave primaria y llave fornea. Existen 2 principales tipos de condiciones JOIN
Equijoins Non-equijoins
Qu es un producto cartesiano? Cuando una condicin de JOIN es invlida u omitida completamente, el resultado es un producto cartesiano, en el cual todas las combinaciones de los registros van a ser desplegadas. Todos los registros de la primer tabla son unidos a todos los registros de la segunda tabla. Ejemplo: SELECT nombre,apellido_paterno FROM departamento,empleado; 4
Mtodos adicionales:
Outer joins Self joins Set operators
3
En donde:
tabla.columna Denota la tabla y la columna de donde es recuperado el dato
Ejemplo de Equijoin
BD
Ejemplo de Equijoin
Unir las tablas empleados y departamentos para desplegar de la tabla empleados, las columnas nombre y el nmero de departamento y de la tabla departamento, la columna nombre
SELECT empleado. apellido_paterno, empleado.id_dep, departamento.nombre FROM empleado, departamento
Id_dep 1 1 2 2 3 3 3 4 5 Departamento Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional Gerencia Regional 8
Empleado
Apellido_paterno BACA BAUTISTA CAMPOSECO CHANDOMI CARDENAS CIGARROA Id_dep 1 1 1 1 2 2
Departamento
Id_dep Departamento 1 Gerencia Regional 1 Gerencia Regional 1 Gerencia Regional 1 Gerencia Regional 2 Gerencia Regional 2 Gerencia Regional
La manera para determinar el nombre del departamento para cada empleado, es comparando los valores de la columna id_dep en la tabla empleado con los valores de la columna Id_dep de la tabla Departamento La relacin entre las tablas empleado y departamento es una equijoin, esto es los valores de la columna id_dep en ambas tablas deben ser iguales. Frecuentemente, estas columnas son la llave primaria y la llave fornea.
7
Ejemplo: Desplegar el nmero de departamento, nmero de regin y el nombre de la regin para todos los departamentos.
Ejemplo: Desplegar el nombre del cliente, nmero de regin y el nombre de la regin para todos los clientes. SELECT c.nombre, c.region_id, r.nombre FROM cliente c, region r WHERE c.id_region = r.id; Nombre del Cliente Deportes de Chiapas Deportycosas Marti id_region Region.Nombre 1 Norte Amrica 1 Norte Amrica 2 Sur Amrica
10
SELECT departamento.id, region.id, region.nombre FROM departamento, region WHERE departamento.id_region = region.id;
Id Departamento 1 2 3 4 5 Region.Id 1 2 3 4 5 Nombre Norte Amrica Sur Amrica Africa/Medio Oriente Asia Europa 9
Non-Equijoin
La relacin entre tablas Empleado y Grado_Salario es un nonequijoin, en la cual ninguna columna de Empleado tiene correspondencia directa con alguna columna en Grado_salario. La relacin es obtenida utilizando un operador diferente a igual ( = )
Ejemplo: Crear un non-equijoin para evaluar el grado de salario de un empleado. El salario debe estar entre cualquier de los rangos bajo y alto. SELECT e.apellido_paterno, e.sueldo, g.grado FROM Empleado e, grado_salario g WHERE e.Sueldo BETWEEN g.ba_sueldo AND g.al_sueldo; apellido_paterno
BAUTISTA CAMPOSECO BALLINAS
Grado 1 1 2
FROM
tabla1, tabla2
12
Empleado
Apellido_Paterno ZENTENO TOLEDO ID 1 2
Cliente
Id_rep_ventas Nombre del Cliente 1 Deportes Marti 2 Deporty Cosas Deportes de Chiapas
SELF JOIN El mejor ejemplo para representar esta situacin es la tabla empleados, la cual es utilizada a travs de 2 perspectivas. Trabajadores Jefes Ejemplo: Desplegar los nombres de los empleados y sus respectivos jefes. SELECT trabajador.apellido_paterno || trabaja para || jefe.apellido_paterno FROM empleado trabajador, empleado jefe WHERE trabajador.id_jefe = jefe.id ;
14
Self joins
BD
Funciones de Grupo.
Las funciones de grupo operan sobre un conjunto de registro para dar un resultado por grupo. Este conjunto puede ser la tabla completa o una tabla dividida en grupos. Las funciones de grupo aparecen en las clusulas SELECT y HAVING.
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY columna, funcin de grupo tabla condicin]
Empleado (trabajador)
Apellido_Paterno PEREZ TOLEDO ZENTENO LOPEZ ROBLES Id_jefe 1 1 1 2 2 Id
Empleado (jefe)
Apellido_Paterno 1 RUIZ 1 RUIZ 1 RUIZ 2 PEREZ 2 PEREZ
Sintaxis
Donde
Especfica las columnas cuyos valores determinan las bases para el agrupamiento de registros. Restringe los grupos de registros recuperados para aquellos grupos para los cuales16 la condicin es verdadera.
Funciones de Grupo.
La clusula GROUP BY en sentencias SELECT divide los registros en pequeos grupos. La clusula HAVING restringe los resultados de grupo.
Valor promedio de n, ignorando valores nulos Nmero de registros, donde expr evala cualquier cosa a nulo. COUNT selecciona todos los registros utilizando *, incluyendo duplicados y registros con valores nulos Valor mximo de expr Valor mnimo de expr Desviacin estndar de n, ignorando valores nulos Suma valores de n, ignorando valores nulos Varianza de n, ignorando valores nulos
AVG(Distinct|All|n) COUNT(Distinct|All|expr|*)
Desplegar el apellido paterno del primero y ltimo empleado de una lista de empleados.
SELECT MAX(apellido_paterno), MIN(apellido_paterno) FROM Empleado; Mximo HERNANDEZ Mnimo BACA
18
Distinct hace que la funcin considere nicamente valores no duplicados; All hace considerar cada valor incluyendo duplicados. El 17 default es All, por lo que no es necesario especificarlo
Funcin COUNT.
La funcin COUNT tiene 2 formatos COUNT(*) y COUNT(expr). COUNT(*) retorna el nmero de registros en una tabla, incluyendo registros duplicados y registros conteniendo valores nulos. Ejemplo: Desplegar el nmero de empleados del departamento 31 SELECT FROM WHERE COUNT(*) empleado Id_depto = 31; Total Empleados 9
Clusula GROUP BY
Se utiliza la clusula GROUP BY para dividir los registros en pequeos grupos Se pueden utilizar la funciones de grupo para retornar un resumen de informacin para cada grupo Sintaxis SELECT columna, funcin de grupo FROM [WHERE tabla condicin]
[GROUP BY expresin group by] [ORDER BY columna]; Si incluyes una funcin de grupo en una clusula SELECT, no se puede seleccionar resultados individuales al menos que la columna individual aparezca en la clusula GROUP BY. Si esto sucede ocasionara un mensaje de error. Utilizando la clusula WHERE, se puede pre excluir registros antes de dividirlos en grupos. Se debe incluir la(s) columna(s) en la clusula GROUP BY. Por default, los registros son ordenados en orden ascendente de la lista GROUP BY. Sin embargo se puede anular utilizando la clusula ORDER 20 BY
En contraste, COUNT(expr) retorna el nmero de registros no nulos de la columna especificada en expr. Ejemplo: Desplegar el nmero de empleados del departamento 31 quienes ganen comisin SELECT FROM WHERE COUNT(pct_comision) empleado Id_depto = 31; Empleados con comisin 3
19
GROUP BY credito_autorizado;
Crdito Autorizado
Utilizando la clusula GROUP BY SELECT id_depat, COUNT(*) FROM WHERE empleado Id_depat = 41
La clusula GROUP BY despliega una lnea de datos para cada registro recuperado en la clusula WHERE, y COUNT(*) despliega el nmero de empleados en cada departamento desplegado
21
Desplegar el nivel de estudios y el total del sueldo mensual para cada nivel de estudios, excluyendo a los Lic..Ordenando la lista por el total del salario mensual SELECT nivel_estudios, SUM(sueldo) FROM WHERE GROUP BY ORDER BY
Secundaria
Nivel_Estudios
22
Desplegar el valor mximo del sueldo para cada nivel de estudios y desplegar el titulo.
nivel_estudios Sueldo_Mayor_Estudios
Se corrige la consulta anterior aadiendo la clusula GROUP BY. Ahora id_region es el nombre de un grupo. SELECT Id_region, COUNT(nombre) FROM Departamento; GROUP BY Id_region;
Regin Departamentos 1 2 5 4
24
SELECT FROM
GROUP BY nivel_estudios;
GROUP BY Id_depat; La consulta anterior generara un error, el cual se corrige, utilizando la clusula HAVING para delimitar los registros. SELECT FROM GROUP BY HAVING
Id_depat 1 2
GROUP BY Id_depat,nivel_estudios;
Id_depat 1 1 1 1 1 2 2 2 Nivel_Estudios Lic. Adm Emp Lic. Contaduria Lic. Sist. Comp. Lic. Turismo Secundaria Lic. Adm Emp Lic. Comercio Int. Lic. Sist. Comp. Secundaria Total 2 3 1 2 1 2 1 3 1 26
La clusula HAVING
Se utiliza la clusula HAVING para especificar que grupos son desplegados. Por lo tanto se puede restringir los grupos en base a la informacin SELECT columna, funcin de grupo FROM tabla condicin] condicin de grupo] [WHERE [HAVING
SELECT FROM
nivel_estudios,Id_depat,COUNT(*) Empleado
GROUP BY nivel_estudios,Id_depat;
Nivel_Estudios Lic. Adm Emp Lic. Adm Emp Lic. Comercio Int. Lic. Contaduria Lic. Sist. Comp. Lic. Sist. Comp. Secundaria Id_depat 1 2 3 1 1 2 2 Total 2 2 2 3 1 3 1
27
Donde: Condicin de grupo: Restringe los grupos de registros recuperados para ese grupo para la condicin especificada es verdadera. Cuando se utiliza la clusula HAVING se ejecutan los siguientes pasos. Los registros son recuperados La funcin de grupo es aplicada Los grupos que cumplen con el criterio de la clusula HAVING 28 son desplegados.
Subquery
Un Subquery es una sentencia SELECT que se encuentra dentro de otra sentencia de SQL Son muy utilizados cuando se necesita seleccionar registros de una tabla con una condicin que depende sobre datos de la tabla misma. Se puede colocar un subquery en las siguientes clusulas: WHERE HAVING FROM de la clusula SELECT o de la sentencia DELETE
Nivel_Estudios Lic. Turismo Lic. Comercio Int. Lic. Adm Emp Lic. Contaduria Lic. Sist. Comp.
30
La clusula HAVING
En el siguiente ejemplo, no existe una funcin de grupo en la clusula SELECT, pero hay en las clusulas HAVING y GROUP BY. Desde que una funcin de grupo es referida en la clusula HAVING, la clusula GROUP BY es requerida. Ejemplo: Desplegar todos los departamentos con un total mensual de pago de nomina mayor que 40,000
SELECT FROM GROUP BY HAVING Id_depat empleado Id_depat SUM(sueldo) > 40000;
Id_depat 1 2 3 4
31
El subquery es tambin conocido como SELECT anidados, Sub-SELECT, sentencias SELECT internas. El subquery es generalmente ejecutado primero, y su resultado es utilizado para completar la consulta para la 32 condicin principal, o query externo.
apellido_paterno, nombre, nivel_estudios empleado Id_depat = (SELECT id FROM departamento WHERE nombre = Contabilidad OR id_region = 2);
36
apellido_paterno, nombre, nivel_estudios empleado Id_depat IN (SELECT id FROM departamento WHERE nombre = Contabilidad OR id_region = 2);
HAVING
Resumen de subqueries
Los subqueries son muy tiles cuando un query esta basado sobre un valor desconocido. Un subquery contiene ms de una sentencia SELECT Primero es procesado el subquery, posteriormente el query principal es ejecutado basado en el resultado del subquery de las clusulas WHERE o HAVING.
nivel_estudios, AVG(sueldo) Empleado nivel_estudios AVG(sueldo) = (SELECT MIN(AVG(sueldo)) FROM empleado GROUP BY nivel_estudios);
39
40
Fin
41