6 sql join
Post on 01-Jun-2015
361 Views
Preview:
TRANSCRIPT
Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Visualización de Datos a partir de Varias Tablas
Visualización de Datos a partir de Varias Tablas
1-132 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
ObjetivosObjetivos
Al completar esta lección, debería ser capaz de hacer lo siguiente:Al completar esta lecciAl completar esta leccióón, debern, deberíía ser a ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:
•• Escribir sentencias SELECT para acceder a Escribir sentencias SELECT para acceder a los datos desde una o mlos datos desde una o máás tablas usando s tablas usando equalityequality y nony non--equalityequality joinsjoins (combinaciones (combinaciones por igualdad y por desigualdad).por igualdad y por desigualdad).
•• Visualizar datos que no se cumplirVisualizar datos que no se cumpliríían an normalmente con una condicinormalmente con una condicióón de n de joinjoinusando usando outerouter joinsjoins (uniones externas).(uniones externas).
•• Combinar (Combinar (JoinJoin) una tabla consigo misma.) una tabla consigo misma.
1-133 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
EMPNO DEPTNO LOC----- ------- --------7839 10 NEW YORK7698 30 CHICAGO7782 10 NEW YORK7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO...14 rows selected.
EMPNO DEPTNO LOC----- ------- --------7839 10 NEW YORK7698 30 CHICAGO7782 10 NEW YORK7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO...14 rows selected.
Obtención de Datos de Múltiples TablasObtención de Datos de Múltiples TablasEMP EMP DEPT DEPT
EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
1-134 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
¿Qué es un JOIN?¿Qué es un JOIN?
Use un join para consultar datos de más de una tabla.
• Escriba la condición de join en la claúsula WHERE.
• Preceda el nombre de la columna con el de la tabla, cuando el mismo nombre de columna, aparezca en más de una tabla.
Use un Use un joinjoin para consultar datos de mpara consultar datos de máás s de una tabla.de una tabla.
• Escriba la condición de join en la claúsula WHERE.
• Preceda el nombre de la columna con el de la tabla, cuando el mismo nombre de columna, aparezca en más de una tabla.
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
1-135 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Producto CartesianoProducto Cartesiano
•• Se establece un producto cartesiano cuando:Se establece un producto cartesiano cuando:
–– Se omite una condiciSe omite una condicióón de n de joinjoin..
–– Se define una condiciSe define una condicióón de n de joinjoin invinváálida.lida.
–– Se combinan todas las filas de la primer Se combinan todas las filas de la primer tabla con todas las filas de la segunda.tabla con todas las filas de la segunda.
•• Para evitar un producto cartesiano, se debe Para evitar un producto cartesiano, se debe incluir siempre una condiciincluir siempre una condicióón de n de joinjoin vváálida en lida en la clla clááusula WHERE.usula WHERE.
1-136 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Generación de un Producto Cartesiano
Generación de un Producto Cartesiano
ENAME DNAME
------ ----------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.
ENAME DNAME
------ ----------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.
EMP (14 registros) EMP (14 registros) DEPT (4 registros) DEPT (4 registros)
EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
““Producto Producto
Cartesiano: Cartesiano:
14*4=56 14*4=56 rowsrows””
1-137 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Tipos de JoinTipos de Join
EquijoinEquijoin Non-equijoinNon-equijoin Outer joinOuter join Self joinSelf join
1-138 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
¿Qué es un Equijoin?¿Qué es un Equijoin?EMP EMP DEPT DEPT
EMPNO ENAME DEPTNO
------ ------- -------
7839 KING 10
7698 BLAKE 30
7782 CLARK 10
7566 JONES 20
7654 MARTIN 30
7499 ALLEN 30
7844 TURNER 30
7900 JAMES 30
7521 WARD 30
7902 FORD 20
7369 SMITH 20
...
14 rows selected.
DEPTNO DNAME LOC
------- ---------- --------
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS
20 RESEARCH DALLAS
...
14 rows selected.
PrimaryPrimary keykey ForeignForeign keykey
1-139 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Recuperación de Registros con Equijoins
Recuperación de Registros con Equijoins
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;
EMPNO ENAME DEPTNO DEPTNO LOC
----- ------ ------ ------ ---------
7839 KING 10 10 NEW YORK
7698 BLAKE 30 30 CHICAGO
7782 CLARK 10 10 NEW YORK
7566 JONES 20 20 DALLAS
...
14 rows selected.
1-140 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Calificación de Nombres de Columna Ambiguos
Calificación de Nombres de Columna Ambiguos
•• Usar como prefijos los nombres de Usar como prefijos los nombres de tablas para calificar los nombres de tablas para calificar los nombres de columnas que estcolumnas que estáán en varias tablas.n en varias tablas.
•• Mejorar el rendimiento usando como Mejorar el rendimiento usando como prefijos los nombres de tablas.prefijos los nombres de tablas.
•• Distinguir columnas que tienen Distinguir columnas que tienen nombres idnombres idéénticos pero pertenecen a nticos pero pertenecen a diferentes tablas usando alias de diferentes tablas usando alias de columnas.columnas.
1-141 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Condiciones de Búsqueda Adicionales Usando el Operador
AND: Ejemplo
Condiciones de Búsqueda Adicionales Usando el Operador
AND: Ejemplo EMP EMP DEPT DEPT
EMPNO ENAME DEPTNO
------ ------- -------
7839 KING 10
7698 BLAKE 30
7782 CLARK 10
7566 JONES 20
7654 MARTIN 30
7499 ALLEN 30
7844 TURNER 30
7900 JAMES 30
7521 WARD 30
7902 FORD 20
7369 SMITH 20
...
14 rows selected.
DEPTNO DNAME LOC
------ --------- --------
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS
20 RESEARCH DALLAS
...
14 rows selected.
1-142 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Uso de Alias de TablaUso de Alias de Tabla
Ayudan a simplificar las consultasAyudan a simplificar las consultasAyudan a simplificar las consultas
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;
SQL> SELECT e.empno, e.ename, e.deptno,
2 d.deptno, d.loc
3 FROM emp e, dept d
4 WHERE e.deptno=d.deptno;
1-143 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Combinando Más de Dos TablasCombinando Más de Dos Tablas
NAME CUSTID
----------- ------
JOCKSPORTS 100
TKB SPORT SHOP 101
VOLLYRITE 102
JUST TENNIS 103
K+T SPORTS 105
SHAPE UP 106
WOMENS SPORTS 107
... ...
9 rows selected.
NAME CUSTID
----------- ------
JOCKSPORTS 100
TKB SPORT SHOP 101
VOLLYRITE 102
JUST TENNIS 103
K+T SPORTS 105
SHAPE UP 106
WOMENS SPORTS 107
... ...
9 rows selected.
CUSTOMER CUSTOMER
CUSTID ORDID
------- -------
101 610
102 611
104 612
106 601
102 602
106 604
106 605
...
21 rows selected.
CUSTID ORDID
------- -------
101 610
102 611
104 612
106 601
102 602
106 604
106 605
...
21 rows selected.
ORD ORD
ORDID ITEMID
------ -------
610 3
611 1
612 1
601 1
602 1
...
64 rows selected.
ORDID ITEMID
------ -------
610 3
611 1
612 1
601 1
602 1
...
64 rows selected.
ITEM ITEM
1-144 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Non-EquijoinsNon-Equijoins
EMPEMP SALGRADESALGRADE
““el salario en la tabla el salario en la tabla
EMP, estEMP, estáá entre el salarioentre el salario
mmáás bajo y el salario s bajo y el salario
mmáás alto de la tablas alto de la tabla
SALGRADESALGRADE””
EMPNO ENAME SAL
------ ------- ------
7839 KING 5000
7698 BLAKE 2850
7782 CLARK 2450
7566 JONES 2975
7654 MARTIN 1250
7499 ALLEN 1600
7844 TURNER 1500
7900 JAMES 950
...
14 rows selected.
GRADE LOSAL HISAL
----- ----- ------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
1-145 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Recuperación de Registros conNon-Equijoins
Recuperación de Registros conNon-Equijoins
ENAME SAL GRADE
---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.
SQL> SELECT e.ename, e.sal, s.grade
2 FROM emp e, salgrade s
3 WHERE e.sal
4 BETWEEN s.losal AND s.hisal;
1-146 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Outer JoinsOuter Joins
EMP EMP DEPT DEPT
No hay empleados en el No hay empleados en el
departamento OPERATIONSdepartamento OPERATIONS
ENAME DEPTNO
----- ------
KING 10
BLAKE 30
CLARK 10
JONES 20
...
DEPTNO DNAME
------ ----------
10 ACCOUNTING
30 SALES
10 ACCOUNTING
20 RESEARCH
...
40 OPERATIONS
1-147 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Outer JoinsOuter Joins
• Usar Outer Join para ver las filas que no cumplen la condición de join.
• El operador de un Outer Join es el signo más (+).
• Usar Outer Join para ver las filas que no cumplen la condición de join.
• El operador de un Outer Join es el signo más (+).
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column = table2.column(+);
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column = table2.column(+);
1-148 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Uso de Outer JoinsUso de Outer Joins
SQL> SELECT e.ename, d.deptno, d.dname
2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno
4 ORDER BY e.deptno;
ENAME DEPTNO DNAME
---------- --------- -------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
1-149 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Self JoinsSelf Joins
EMP (WORKER)EMP (WORKER) EMP (MANAGER)EMP (MANAGER)
““MGR en la tabla WORKER es igual a MGR en la tabla WORKER es igual a
EMPNO en la tabla MANAGEREMPNO en la tabla MANAGER””
EMPNO ENAME MGR
----- ------ ----
7839 KING
7698 BLAKE 7839
7782 CLARK 7839
7566 JONES 7839
7654 MARTIN 7698
7499 ALLEN 7698
EMPNO ENAME
----- --------
7839 KING
7839 KING
7839 KING
7698 BLAKE
7698 BLAKE
1-150 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
Combinación de una TablaConsigo Misma
Combinación de una TablaConsigo Misma
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
SQL> SELECT worker.ename||' works for '||manager.ename
2 FROM emp worker, emp manager
3 WHERE worker.mgr = manager.empno;
1-151 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002
ResumenResumen
EquijoinEquijoin Non-equijoinNon-equijoin Outer joinOuter join Self joinSelf join
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
top related