21
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

6 sql join

Embed Size (px)

Citation preview

Page 1: 6 sql join

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

Page 2: 6 sql join

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.

Page 3: 6 sql join

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

Page 4: 6 sql join

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;

Page 5: 6 sql join

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.

Page 6: 6 sql join

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””

Page 7: 6 sql join

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

Page 8: 6 sql 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

Page 9: 6 sql join

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.

Page 10: 6 sql join

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.

Page 11: 6 sql join

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.

Page 12: 6 sql join

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;

Page 13: 6 sql join

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

Page 14: 6 sql join

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

Page 15: 6 sql join

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;

Page 16: 6 sql join

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

Page 17: 6 sql join

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(+);

Page 18: 6 sql join

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.

Page 19: 6 sql join

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

Page 20: 6 sql join

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;

Page 21: 6 sql join

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;