lunes, 29 de agosto de 2011

FUNCIONES


 O

UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
INF-272 TALLER DE BASE DE DATOS
DOCENTE: CELIA TARQUINO PERALTA
UNIVERSITARIA: ELIZABETH OROZCO APAZA
CI: 6829058 LP.
FECHA: 23 DE AGOSTO DE 2011.



TAREA No.
1.   INNER JOIN

El INNER JOIN es otro tipo de composición de tablas, 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.

Con esta operación 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 sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación predeterminado.
SQL: especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentenciaWHERE.
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 número de departamento de un empleado no coincide con los números 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 implícita (B).



Tabla Empleado
Apellido
IDDepartamento
Andrade
31
Jordán
33
Steinberg
33
Róbinson
34
Zolano
34
Gaspar
36



Tabla Departamento
NombreDepartamento
IDDepartamento
Ventas
31
Ingeniería
33
Producción
34
Mercadeo
35









A. Ejemplo de la sentencia INNER JOIN explícita:
SELECT *
FROM   empleado
       INNER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento

B. Ejemplo de la sentencia INNER JOIN implícita:
SELECT *
FROM   empleado, departamento
WHERE  empleado.IDDepartamento = departamento.IDDepartamento
Resultados:

Empleado.Apellido
Empleado.IDdepartamento
departamento.NombreDepartamento
departamento.IDDepartamento
Zolano
34
Producción
34
Jordán
33
Ingeniería
33
Róbinson
34
Producción
34
Steinberg
33
Ingeniería
33
Andrade
31
Ventas
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 número 36 ni existe un empleado con número de departamento 35.
A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.
C. Ejemplo de combinación tipo theta:
SELECT *
FROM   empleado
       INNER JOIN departamento
          ON empleado.IDDepartamento < departamento.IDDepartamento

Las operaciones
 INNER JOIN puede ser clasificadas como de equivalencia, naturales, y cruzadas.
1.1.        De equivalencia (equi-join)
Es una especie de theta-join que usa comparaciones de igualdad en el predicado JOIN. Cuando se usan operadores, tales como < o > no se puede clasificar en este rango.
D. Ejemplo de combinación de equivalencia:
SELECT *
FROM   empleado
       INNER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento
La tabla resultante presenta dos columnas llamadas IDDepartamento, una proveniente de la tabla Empleado y otra de la tabla Departamento.
SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.
1.2.        Natural (Natural join)
Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante contiene sólo una columna por cada par de columnas con el mismo nombre.

E. Ejemplo de combinación natural:
SELECT *
FROM   empleado NATURAL JOIN departamento
El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se muestra sola una vez en la tabla resultante.


Empleado.Apellido
IDDepartamento
Departamento.NombreDepartamento
Zolano
34
Producción
Jordán
33
Ingeniería
Róbinson
34
Producción
Steinberg
33
Ingeniería
Andrade
31
Ventas


El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al añadir, quitar, o renombrar las columnas, puede perder el sentido la sentencia; por esta razón es preferible expresar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).
1.3.        Cruzada (Cross join)
Presenta el producto cartesiano de todos los registros de las dos tablas.
El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún predicado que filtre el resultado.
F. Ejemplo de combinación cruzada explícita:
SELECT *
FROM   empleado CROSS JOIN departamento
G. Ejemplo de combinación cruzada implícita:
SELECT *
FROM   empleado, departamento;

Empleado.Apellido
Empleado.IDDepartamento
Departamento.NombreDepartamento
Departamento.IDDepartamento
Andrade
31
Ventas
31
Jordán
33
Ventas
31
Steinberg
33
Ventas
31
Zolano
34
Ventas
31
Róbinson
34
Ventas
31
Gaspar
36
Ventas
31
Andrade
31
Ingeniería
33
Jordán
33
Ingeniería
33
Steinberg
33
Ingeniería
33
Solano
34
Ingeniería
33
Róbinson
34
Ingeniería
33
Gaspar
36
Ingeniería
33
Andrade
31
Producción
34
Jordán
33
Producción
34
Steinberg
33
Producción
34
Solano
34
Producción
34
Róbinson
34
Producción
34
Gaspar
36
Producción
34
Andrade
31
Mercadeo
35
Jordán
33
Mercadeo
35
Steinberg
33
Mercadeo
35
Solano
34
Mercadeo
35
Róbinson
34
Mercadeo
35
Gaspar
36
Mercadeo
35

Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan condiciones de filtrado con la sentencia WHERE para hallar resultados específicos.

2. Combinación externa (OUTER JOIN)
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.
En SQL: no existe una notación implícita para las combinaciones externas.
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.

2.1. 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.
A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el empleado cuyo departamento no existía; en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se presentará el empleado, cuyo departamento no existe.
H. Ejemplo de tabla izquierda para la combinación externa:
SELECT *
FROM   empleado
       LEFT OUTER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido
Empleado.IDDepartamento
Departamento.NombreDepartamento
Departamento.IDDepartamento
Jordán
33
Ingeniería
33
Andrade
31
Ventas
31
Róbinson
34
Producción
34
Zolano
34
Producción
34
Gaspar
36
NULL
NULL
Steinberg
33
Ingeniería
33

2.2. 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.
I. Ejemplo de tabla derecha para la combinación externa:

SELECT *
FROM   empleado
       RIGHT OUTER JOIN departamento
          ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido
Empleado.IDDepartamento
Departamento.NombreDepartamento
Departamento.IDDepartamento
Zolano
34
Producción
34
Jordán
33
Ingeniería
33
Róbinson
34
Producción
34
Steinberg
33
Ingeniería
33
Andrade
31
Ventas
31
NULL
NULL
Mercadeo
35



En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay empleados registrados en dicha área.
3.    Funciones Agregadas
SQL define las funciones agregadas para simplificar cálculos agregados de datos del servidor. Casi todas las funciones agregadas realizan un paso de eliminación Null, de modo que los valores Null no sean incluidos en el resultado final del cálculo. Esta eliminación implícita Null, sin embargo, puede influir en los resultados de funciones agregadas. La tabla ejemplificada a continuación deriva resultados diferentes siendo devueltos a cada columna cuando la función agregada SQL AVG (media) es aplicada:

Tabla
i
j
150
150
200
200
350
350
NULL
0




La función agregada SQL AVG devuelve 233 cuando se aplica a la columna i, pero vuelve 175 cuando es aplicado a la columna j. El paso de eliminación de la función agregada Null explica la diferencia en estos resultados. La única función agregada que no elimina implícitamente la Null es la función COUNT.

4.    Agrupación y Calificación

Como SQL define todos los marcadores Null como desiguales entre sí, requirieron una definición especial para agrupar las Null en la realización de ciertas operaciones. SQL define "cualquiera de los dos valores que sean iguales el uno al otro, o cualquier pareja de Nulls", como "no distinto". Esta definición de no distinto permite a SQL agrupar y clasificar los Nulls cuando la cláusula GROUP BY (y otras palabras clave que realizan la agrupación) es usada.
Otras operaciones SQL, cláusulas, y palabras clave usan "no distinto" en su tratamiento de Nulls. Estos incluyen lo siguiente:
§  La cláusula de clasificación PARTITION BY y funciones de enventanado (windowing) como ROW_NUMBER.
§  UNION, INTERSECT y el operador EXCEPT, que tratan los NULLs igual para las determinaciones de comparación/eliminación en filas.
§  La palabra clave DISTINCT es usada en preguntas SELECT.
§  Coacciones Únicas sobre columnas en las que pueda encontrarse la función Null, que permiten sólo a un valor solo Nulo ser almacenado en la columna.
El estándar SQL no define explícitamente por defecto la clase de orden para los Null. En cambio, sobre sistemas conformados, los Nulls pueden ser clasificados antes o después de todos los valores de datos mediandte el uso de las cláusulas NULLS FIRST o NULLS LAST de la lista ORDER BY, respectivamente. No todos los vendedores de DBMS ponen en práctica esta funcionalidad pese a todo. Los vendedores que no ponen en práctica esta funcionalidad pueden especificar tratamientos diferentes para la clasificación de Null en el DBMS.


RELACION ENTRE FUNCIONES AGREGADAS Y GROUP BY

·         Casi todas las funciones agregadas realizan un paso de eliminación Null, de modo que los valores Null no sean incluidos en el resultado final del cálculo. 
·         En SQL se define todos los marcadores Null como desiguales entre sí, requirieron una definición especial para agrupar las Null en la realización de ciertas operaciones. SQL define "cualquiera de los dos valores que sean iguales el uno al otro, o cualquier pareja de Nulls", como "no distinto". Esta definición de no distinto permite a SQL agrupar y clasificar los Nulls cuando la cláusula GROUP BY (y otras palabras clave que realizan la agrupación) es usada.

No hay comentarios:

Publicar un comentario