Versin 2 de Notas de E-28 seccin 2

TEMA No. 1 Sección No. 3. JOIN.

Antes de comenzar la clase una Reflexión:La Nueva Generación De Padres De Familia.
>>Una Reflexión para Padres e Hijos.<<

Somos de las primeras generaciones de padres decididos a no repetir con los hijos los mismos errores que pudieron haber cometido nuestros progenitores.

Y en el esfuerzo de abolir los abusos del pasado, ahora somos los mas dedicados y comprensivos, pero a la vez lo más débiles e inseguros que ha dado la historia.

Lo grave es que estamos lidiando con unos niños, adolescentes y hasta estudiantes Universitarios mas “igualados”, beligerantes y poderosos que nunca existieron.

Parece que en nuestro intento por ser los padres que quisimos tener, pasamos de un extremo al otro. Así que, somos los últimos hijos regañados por los padres y los primeros padres regañados por nuestros hijos.

Los últimos que le tuvimos miedo a nuestros padres y los primeros que tememos a nuestros hijos. Los últimos que crecimos bajo el mando de los padres y los primeros que vivimos bajo el yugo de los hijos.

Lo que es peor, los últimos que respetamos a nuestros padres, y los primeros que aceptamos que nuestros hijos no nos respeten.

En la medida que el permisivismo reemplazó al autoritarismo, los términos de las relaciones familiares han cambiado en forma radical, para bien y para mal.

En efecto, antes se consideraban buenos padres a aquellos cuyos hijos se comportaban bien, obedecían sus ordenes y los trataban con el debido respeto. Y buenos hijos a los niños que eran formales y veneraban a sus padres.

Pero en la medida en que las fronteras jerárquicas entre nosotros y nuestros hijos se han ido desvaneciendo, hoy los buenos padres son aquellos que logran que sus hijos los amen, aunque poco los respeten.

Y son los hijos quienes ahora esperan el respeto de sus padres, entendiendo por tal que les respeten sus ideas, sus gustos, sus apetencias, sus formas de actuar y de vivir. Y que además les patrocinen lo que necesitan para tal fin.

Como quien dice, los roles se invirtieron, y ahora son los papás quienes tienen que complacer a sus hijos para ganárselos, y no a la inversa, como en el pasado.

Esto explica el esfuerzo que hoy hacen tantos papás y mamás por ser los mejores amigos de sus hijos y parecerles “muy cool” a sus hijos.

Sé a dicho que los extremos se tocan, y si el autoritarismo del pasado llenó a los hijos de temor hacia sus padres, la debilidad del presente los llena de miedo y menosprecio al vernos tan débiles y perdidos como ellos.

Los hijos necesitan percibir en la niñez que estamos a la cabeza de sus vidas como lideres, capaces de sujetarlos cuando no se pueden contener y de guiarlos mientras no saben para donde van.

Si bien el autoritarismo aplasta, el permisivismo ahoga

Solo una actitud firme y respetuosa les permitirá confiar en nuestra idoneidad para gobernar sus vidas mientras sean menores, porque vamos adelante liderándolos y no atrás cargándolos y rendidos a su voluntad.

 

Es así como evitaremos que las nuevas generaciones se ahoguen en el descontrol y hastío en el que se esta hundiendo la sociedad que parece ir a la deriva, sin parámetros, ni destino.

 

 


CONSULTANDO VARIAS TABLAS (JOIN).

         
La técnica para Consultar información contenida en varias Tablas, se conoce en términos de SQL como JOIN. Se puede decir entonces que: Un JOIN es la forma que utiliza el SELECT para combinar filas(Registros) de dos o más tablas.
           


JOIN SIMPLE

 Cuando se hace un SELECT de dos o mas Tablas, un JOIN Simple, tiene la capacidad de generar Información mediante la Relación de Columnas(Campos) comunes en las Tablas relacionadas.


Sintaxis

SELECT   [ table. ]  column, [table,] column. . .
FROM  table1, table2. . .
WHERE  [   table1.  ]  column  =  [ table2. ] column

Ejemplo

Mostrar el Código de Cliente, Nombre de Cliente, Número de Facturas asociadas a cada Cliente, Fecha de cada Factura y Monto Total de Cada Factura.
 
Para ejecutar esta Instrucción es necesario invocar a varias Tablas en el FROM. Luego es necesario en el WHERE igualar las Columnas(Campos) que hacen la Conexión entre las Tablas involucradas. En este caso, las Columnas que permiten la Conexión son:  código y  codcli, es decir cuando ellas dos son iguales se sabe que una Factura Y le pertenece a un Cliente X. 
1

 

Es importante notar que si dos Tablas tienen Columnas con un mismo nombre, es necesario colocar un prefijo con el nombre de la Tabla para que ORACLE sepa a que columna se está haciendo referencia. Tal es el caso del campo estatus el cual se encuentra en ambas Tablas y posee el mismo nombre.

En la Consulta no es estrictamente necesario mostrar la Columna codcli, pero se hizo para validar que las columnas de conexión son efectivamente iguales.
De esta Manera, se puede combinar de una forma fácil la información de varias columnas a la vez(Dos, Tres, Cuatro, Cinco y todas las que se deseen en una sola Consulta).

PRODUCTO  CARTESIANO.

 

Todo profesional con experticia en SQL, debe conocer este Concepto y tomar conciencia de los enormes problemas que su existencia puede ocasionar en cualquier Sistema. El Producto Cartesiano puede aparecer cuando se hacen consultas de varias Tablas y debe ser evitado en todo momento.

 


Concepto

De una manera sencilla, se puede definir el Producto Cartesiano de la siguiente manera: Se tiene dos Conjuntos A y B. El conjunto A={a,b,c}. Y el Conjunto B={1,2}. El Producto Cartesiano AxB se define como la relación del Primer Elemento del Conjunto A con cada uno de los Elementos del Conjunto B. Al establecerse esa relación se generarían las Tuplas [a,1], es decir, la Relación del Primer elemento del Conjunto A con el primer elemento del Conjunto B. Luego se generarían las Tuplas [a,2],[b,1], [b,2],[c,1],[c,2].
 


¿Como se genera un Producto Cartesiano en SQL?

Obviando la igualdad de las Columnas(Campos) que establecen la Relación entre las Tablas.
Un ejemplo de Producto Cartesiano entre las Tablas de Clientes y de Facturas sería, la siguiente Instrucción:

1

Por razones de espacio no se muestra la salida Completa, la cual ocuparía 4 páginas de este texto. Lo importante que hay que resaltar aquí, es que el haber obviado la igualdad entre las Columnas código y codcli, originó como se puede notar que el SQL relacione al Cliente 0001 MAKRO con la Factura 1851 lo cual no es correcto porque esa factura le corresponde al Cliente 0004 UCLA. Peor aún, SQL relacionó la Factura 1851 con cada uno de los Clientes registrados, como se puede notar. Luego la Factura 1852 también la relacionó con cada uno de los Clientes existentes y así sucesivamente. Es decir la salida es completamente incorrecta. Adicionalmente hay que notar que una salida correcta de 12 filas se convirtió en una salida incorrecta de muchas filas mas.

Aunado al Problema originado por la salida, se presenta otro problema sumamente grave: Los manejadores cuando hacen operaciones con Tablas montan la Información contenida en las mismas en Memoria Principal para optimizar la velocidad de búsqueda. El resultado de la combinación de las tablas también se monta en Memoria Principal. Quiere decir que si un usuario genera Producto Cartesiano constante, es capaz de agotar la Memoria RAM del equipo donde esté trabajando y traerle a ese Computador problemas de lentitud y hasta colapso en sus operaciones.

Imagine lo que pasaría si en vez de ser 10 Clientes, existiera una Tabla con 100 Mil Clientes. Y si esos Clientes en vez de tener 12 Facturas tuvieran 120 Mil Facturas. El Producto cartesiano generado probablemente se habría consumido una porción muy importante de cualquier Computador.

MORALEJA FINAL: El Producto cartesiano debe ser evitado en lo posible para evitar salidas inadecuadas y Problemas de Velocidad de Respuesta.

¿Qué se debe hacer al Respecto?

Examinemos la siguiente Instrucción:

1

 

Note que aquí se le dice a ORACLE que restrinja la relación entre las Columnas al cumplirse que la columna código sea igual a la columna codcli.  Pero, si no se establece esa igualdad, ORACLE trataría de relacionar todas las columnas de la Primera Tabla con cada una de las Columnas de la Segunda Tabla, como sucedió en el Ejemplo anterior.

VOLVIENDO AL “JOIN”  SIMPLE

Con el uso de este JOIN, se puede obtener información adicional mediante la obtención de varias tablas.

Ejemplo con 3 Tablas.

 Mostrar el Código del Cliente, Nombre del Cliente, Número de Factura, Fecha de la Factura, Código de cada Artículo de la Factura, Cantidad, Precio y Subtotal.  Ordenado por Cliente.

1
1


Ejemplo con 4 Tablas.

Mostrar  Código del Cliente, Nombre de Cliente, Número de Factura, Código de cada Artículo de la Factura, Descripción de Cada Artículo, Cantidad, Precio y Subtotal.  Ordenado por Cliente.
1
1

JOIN EXTERNO

          Un JOIN externo combina información de dos o más tablas, retornando inclusive aquellas filas que están en una tabla y que no están en la otra.

Ejemplo

Cuando se utilizó el JOIN SIMPLE para obtener a los Clientes con sus respectivas Facturas, puede notarse que el Cliente 0005 ÉXITO no aparece en la Salida, en vista de que no posee actualmente Facturas asociadas. Si el usuario desea obtener la Información, y que salgan los clientes que no tengan facturas asociadas,  se debe utilizar un JOIN EXTERNO.
1
Debe notarse que el Cliente 0005 Éxito, ahora si está presente en la salida ejecutada.


SubQuery

Los SubQuerys permiten realizar comparaciones entre valores de una misma Tabla. Por ejemplo una persona puede indagar acerca de los trabajadores que ganan un sueldo superior al suyo.


Ejemplo

Listar los Clientes cuyo Límite de Crédito es superior al Cliente BECO (Código=0002).
1

 

UNION, INTERSECT y MINUS

 

Combinan  el resultado de dos o mas Querys en uno solo. Es necesario tomar en cuenta que:

  1. Las Columnas que forman parte de los diferentes SELECT deben ser del mismo tipo.
  2. La cantidad de Columnas deben ser iguales.
  3. Si se utiliza la cláusula ORDER BY, se debe especificar el número de la columna.
  4. En los tres operadores existe un DISTINCT implícito.

UNION

Permite integrar información de dos tablas en un mismo listado de manera consecutiva. Al respecto, retorna los valores que se encuentran en cualquiera de las tablas involucradas. Obedece a la operación de UNION de conjuntos(“Los que se encuentran en A o se encuentran en B”).

Ejemplo

Listar a los Clientes y a los Proveedores en una misma salida. Ahora bien, se debe recordar que los proveedores fueron creados a partir de la tabla de clientes utilizando un Query  y una secuencia. Los Proveedores son:
1
Al realizar la operación de UNION nos quedaría:
11

Y la salida correspondiente sería:

1

INTERSECT

Retorna aquellas Filas que se encuentran en la 1ª y en la 2ª. tabla. Para notar la diferencia vamos a agregar un nuevo proveedor., el cual será BECO código 0002 (Ya BECO existe como Proveedor con código 6), pero es necesario colocarlo con el mismo código de cliente para probar la intersección.
1
Al realizar la intersección, nos queda:
1
Beco es la única fila que se encuentra en ambas tablas.

MINUS

Retorna aquellas Filas que se encuentran en la Primera Tabla y no están en la segunda tabla.

Ejemplo

Listar los Artículos que no han sido facturados. Para ello se listan todos los Artículos registrados en esa tabla, excepto aquellos que aparecen en la Tabla DetFacturas.  Por la manera como se encuentran cargadas de información la tablas, todos los artículos han sido facturados. En consecuencia, se necesita ingresar un nuevo artículo.

1
Los artículos facturados son:
1
Por ende al realizar el MINUS nos queda:
1111
Porque el Artículos cuyo código es 0009 es el único que no ha sido facturado.

PRACTICA III

  1. Analice las desventajas del Producto Cartesiano y explique porque es inconveniente.
  2. Elabore una Consulta que traiga el código y nombre de un cliente, el código y la descripción de los productos que le han sido facturados, la existencia que tenía ese producto antes de la elaboración de esa factura.
  3. Muestre las Facturas que sean mas antiguas que la facturas Número 1856.
  4. Elabore una Consulta que especifique los Clientes que no poseen facturas.

 

DESPUÉS DE ESTA CLASE TANNNNNNN!!!!!! LARGA: Algo de RELAX.

En esta oportunidad, la Viejita  fue a la cárcel  del pueblo dispuesta a entrar a la visita conyugal.
A su llegada, comienza la siguiente conversación:
Vigilante: Disculpe Abuela que desea?
Viejita: Vengo a una Visita Conyugal.
Vigilante Extrañado: Pero a quién visitará si usted no tiene ningún esposo o novio en esta cárcel.
Viejita: No importa Mijo a cualquiera!!!!!!!!!!!!!!!