La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Desplegando datos de múltiples tablas

Presentaciones similares


Presentación del tema: "Desplegando datos de múltiples tablas"— Transcripción de la presentación:

1 Desplegando datos de múltiples tablas
5 Desplegando datos de múltiples tablas

2 Objetivos Específicos de Aprendizaje
Escribir sentencias que accesen datos en más de una tabla utilizando equijoins y non-equijoins Visualizar datos que generalmente no son una condición join Hacer un join con la misma tabla

3 Obtener datos de múltiples tablas
EMPNO ENAME ... DEPTNO 7839 KING 7698 BLAKE ... 7934 MILLER EMP DEPTNO DBAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON DEPT EMPNO DEPTO LOC NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO ... (14 row(s) affected)

4 ¿ Qué es un Join ? Utilice un join para consultar datos en más de una tabla. Escriba la condición-join en la cláusula FROM utilizando ON. Incluya el nombre de la tabla como prefijo del nombre de la columna, cuando el nombre de la columna aparezca en dos ó más tablas. SELECT table1.column, table2.column FROM table1 INNER JOIN table2 ON table1.column1 = table2.column2;

5 Implementar un Join tradicional
Puede crear un Join utilizando la condición-join en la cláusula WHERE. Esta es la sintaxis general para crear un Join. SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;

6 Producto cartesiano A x B A B x = a x a y a x b x b y b y c c x c y
En matemáticas, el producto cartesiano de dos conjuntos, es el conjunto de todos los pares ordenados de elementos, tales que el primer elemento de cada par pertenece a A y el segundo elemento de cada par pertenece a B. Representado por la siguiente expresión:

7 Producto cartesiano Un producto cartesiano es formado cuando:
Una condición-join es omitida. Una condición-join es inválida. Todos los registros de la primer tabla se unen con todos los registros de la segunda tabla. Para evitar un Producto Cartesiano, incluya siempre condición-join válida en la cláusula WHERE. Producto Cartesiano Cuando una condición-join es inválida o se omite, el resultado es un Producto Cartesiano en el que se combinan cada uno de los renglones de la tabla 1 con todos los de la tabla 2, hasta terminar el último registro de la tabla 1, con todos los de la tabla 2. Un Producto Cartesiano tiende a generar un gran número de renglones (multiplicar la Cardinalidad de la tabla 1 por la Cardinalidad de la tabla 2, y se obtiene la Cardinalidad del producto Cartesiano). Cardinalidad: En el modelo relacional, es el número de renglones de una tabla.

8 Generar un producto cartesiano
EMPNO ENAME ... DEPTNO 7839 KING 7698 BLAKE ... 7934 MILLER EMP (14 rows) DEPTNO DBAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON DEPT (4 rows) ENAME DNAME KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH (56 row(s) affected) Producto Cartesiano En el ejemplo se muestran el nombre de los empleados y el de los departamentos de las tablas EMP y DEPT, debido a que no se indicó ninguna condición sobre la cláusula WHERE, todos los renglones (14) de la tabla EMP son unidos (joined) a los renglones (4) de la tabla DEPT, el resultado es una tabla con 56 renglones. Producto cartesiano: 14*4 =56 renglones

9 Tipos de Join’s Equijoin Non-equijoin Outer join Self join
Existen dos tipos principales de condición-join. Equijoins (inner join) Non-eqijoins Existen joins adicionales: Outer Joins (left | right join) Self Joins

10 ¿Qué es un Equijoin ? EMPNO ENAME DEPTNO ---- ----- ------
7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN 7499 ALLEN 7844 TURNER 7900 JAMES 7521 WARD 7902 FORD 7369 SMITH ... 14 row(s) selected. EMP DEPTNO DBAME LOC 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 20 RESEARCH DALLAS ... 14 row(s) selected. DEPT Equijoins Para determinar el nombre de los departamentos a los que pertenece cada empleado, se necesita comparar el valor en la columna DEPTNO de la tabla EMP con los valores de DEPTNO en la tabla DEPT. La relación entre las tablas EMP y DEPT son conocidas como un equijoin, es decir, los valores de las columnas DEPTNO en ambas tablas deben coincidir. Nota: Los equijoins son también llamados simplemente joins o inner joins. Foreign Key Primary Key

11 Recuperación de renglones con Equijoins (inner)
SELECT emp, empno, emp.ename, emp.deptno, dept.deptno, dept.loc FROM emp INNER JOIN dept ON emp.deptno=dept.deptno; empno ename deptno deptno loc 7369 SMITH DALLAS 7499 ALLEN CHICAGO 7521 WARD CHICAGO 7566 JONES DALLAS .... 14 row(s) affected. Recuperando Renglones con Equijoins En el ejemplo: La cláusula SELECT especifica las columnas a recuperar: Número y nombre del empleado y número del departamento al que está asignado tal empleado, tomados de la tabla EMP. Número del departamento y localización que son columnas de la tabla DEPT. La cláusula FROM especifica las tablas que deberán ser accesadas y el tipo de join que se efectuará entre ellas 8INNER JOIN): Tabla DEPT Tabla EMP ON especifica la condición del join: emp.deptno=dept.deptno; Como la columna DEPTNO es común en ambas tablas debe ser calificado con el nombre de la tabla respectiva.

12 Recuperación de renglones con Equijoins (inner)
SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc FROM emp, dept WHERE emp.deptno=dept.deptno; empno ename deptno deptno loc 7369 SMITH DALLAS 7499 ALLEN CHICAGO 7521 WARD CHICAGO 7566 JONES DALLAS .... 14 row(s) affected. Recuperando Renglones con Equijoins (continuación) En el ejemplo: La cláusula FROM especifica las tablas que deberán ser accesadas sin especificar el tipo de join que se efectuará entre ellas: Tabla DEPT Tabla EMP La cláusula WHERE especifica como las tablas realizarán el join en este caso es un equi-join: emp.deptno = dept.deptno;

13 Calificando columnas repetidas
Utilice el nombre de la tabla como prefijo para calificar los nombres de la columna que están en múltiples tablas. Mejore el rendimiento utilizando prefijos de tablas Diferencie las columnas que tiene nombres idénticos, pero se encuentran en tablas diferentes, utilizando un alias.

14 Utilizando condiciones adicionales
EMPNO ENAME DEPTNO 7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN 7499 ALLEN 7844 TURNER 7900 JAMES 7521 WARD 7902 FORD 7369 SMITH ... 14 row(s) selected. EMP DEPTNO DBAME LOC 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 20 RESEARCH DALLAS ... 14 row(s) selected. DEPT Condiciones adicionales Además del join, puede indicar otros criterios de búsqueda en la cláusula WHERE. Por ejemplo, mostrar el número, el nombre, del número de departamento y la localización del departamento del empleado KING.

15 Usando alias en tablas Simplifique los query’s utilizando alias en tablas. SELECT emp, empno, emp.ename, emp.deptno, dept.deptno, dept.loc FROM emp INNER JOIN dept ON emp.deptno=dept.deptno; Usando Alias en las tablas Calificar las columnas con los nombres de las tablas puede consumir tiempo, sobre todo cuando las tablas tienen nombres largos. Puede utilizar alias para renombrar las tablas. En el ejemplo la tabla EMP toma el nombre de E y la tabla DEPT el nombre D. SELECT e, empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;

16 Reunir más de dos tablas
NAME CUSTID JACKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... 9 row(s) selected. CUSTOMER CUSTID ORDID ... 21 row(s) selected. ORD ORDID ITEMID 610 3 611 1 612 1 601 1 602 1 ... 64 rows selected. ITEM Condiciones de búsqueda adicionales En ocasiones necesitará hacer join con mas de dos tablas. Por ejemplo, para mostrar el nombre, las órdenes y los items, el total de cada orden para el cliente TKB SPORT SHOP, necesitará reunir las tablas CUSTOMER, ORD e ITEM.

17 Non-Equijoins EMPNO ENAME SAL ---- ---------- ------ 7839 KING 5000
7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 row(s) selected. EMP GRADE LOSAL HISAL SALGRADE Non-equijoins La relación entre las tablas EMP y SALGRADE son un Non-Equijoins, es decir, que ninguna columna de la tabla EMP corresponde directamente a una columna en la tabla SALGRADE. La relación entre estas dos tablas es por la columna LOSAL Y HILASAL de la tabla SALGRADE. La relación se obtiene utilizando otro operador diferente de (=). “salario en la tabla EMP se encuentra entre low salary y high salary en la tabla SALGRADE”

18 Recuperar registros con Non-equijoins
SELECT e.ename, e.sal, s.grade FROM emp e JOIN salgrade s ON e.sal BETWEEN S.LOSAL and S.hisal; ENAME SAL GRADE JAMES SMITH ADAMS ... 14 row(s) selected. Recuperación de Registros con Non-Equijoins El ejemplo crea un non-equijoin para evaluar qué nivel tiene el salario de cada empleado. Este salario debe estar entre cualquier rango de lowsal y hisal de la tabla SALGRADE. Puede utilizar el método tradicional:

19 Outer Joins (LEFT | RIGHT)
ENAME DEPTNO KING 10 BLAKE 30 CLARK 10 JONES 20 ... EMP DEPTNO DNAME 10 ACCOUNTING 30 SALES 20 RESEARCH ... 40 OPERATIONS SALGRADE Outer Joins (LEFT | RIGHT) Si los renglones no satisfacen la condición join, entonces el renglón no aparecerá en el resultado del query. Por ejemplo, en el equi-join de EMP y DEPT, el departamento OPERATIONS no aparee debido a que ningún empleado trabaja en ese departamento. No existen empleados en el departamento “OPERATIONS”

20 Outer Joins Puede utilizar un “outer join” para ver también aquellos renglones que normalmente no cumplen la “condición-join”. Outer join puede ser por la izquierda (LEFT) o por la derecha (RIGHT). SELECT tablek.columnl, tablem.columnp FROM table1 LEFT OUTER JOIN tableq ON table1.columnl = tableq.columnp Outer Joins Los renglones que no cumplen con la condición pueden ser mostrados dependiendo de que lado de la “junta” se encuentren. Utilice las palabras LEFT o RIGHT dependiendo de que lado se encuentran los registros que desee que aparezcan aun cuando no cumplan la condición-join. Nota: Este método no se aplica de la misma forma que los demás tipos de join para el método tradicional (de colocar la condición-join en la cláusula WHERE), por lo que cada manejador utiliza su propia sintaxis para implementar este tipo de joins. Por ejemplo, en ORACLE se utiliza el operador “+” del lado de la condición que evaluará el LEFT o RIGHT. SELECT tablek.columnl, tablem.columnp FROM table1 RIGHT OUTER JOIN tableq ON table1.columnl = tableq.columnp

21 Utilizando Outer Joins
SELECT e.ename, d.deptno, d.dname FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno ORDER BY d.deptno; ENAME DEPTNO DNAME KING ACCOUNTING SMITH ACCOUNTING ... 40 OPERATIONS 15 row(s) selected. Uso de Outer Joins Coloque la palabra LEFT o RIGHT del lado que desee mostrar los renglones con la deficiencia de información.

22 MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER
Self Joins EMPNO ENAME MGR 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7654 JONES 7839 7499 MARTIN 7698 7844 ALLEN 7698 EMP (WORKER) EMPNO ENAME 7839 KING 7698 BLAKE EMP(MANAGER) Self Joins En ocasiones se necesitará hacer un join con la misma tabla. Para encontrar el nombre del jefe de cada empleado, se necesita hacer un join de EMP consigo misma. Por ejemplo, para encontrar el nombre del “Jefe” de Blake, se necesita: Encontrar a Blake en la tabla EMP, mediante la columna ENAME. Encontrar el número de jefe para Blake en la columna MGR. El número de jefe de Blake es 7839. Encontrar el nombre del jefe con EMPNO=7839, mirando en la columna ENAME, King es el nombre que tiene el número De tal forma que King es el jefe de Blake. MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER

23 Haciendo Join con la misma tabla
SELECT worker.ename + ‘ works for ‘ + manager.ename FROM emp worker JOIN emp manager ON worker.mgr = manager.empno; WORKER.ENAME||’WORKS FOR’||MANAG BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 row(s) selected. Haciendo un Join en la misma tabla Un self-join puede ser implementado con el método tradicional de la siguiente forma:

24 Prácticas Utilice equi-joins para unir tablas.
Ejecute outer-joins y self-joins. Agregue condiciones adicionales.


Descargar ppt "Desplegando datos de múltiples tablas"

Presentaciones similares


Anuncios Google