sql server desplegando datos de múltiples tablas 5-1 desplegando datos de múltiples tablas 5

24
SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

Upload: elodia-lombardo

Post on 28-Jan-2016

224 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-1

Desplegando datos de múltiples tablas5

Page 2: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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

Page 3: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-3

Obtener datos de múltiples tablas

EMPNO ENAME ... DEPTNO---- ----- ... ------7839 KING ... 107698 BLAKE ... 30...7934 MILLER... 10

EMPNO ENAME ... DEPTNO---- ----- ... ------7839 KING ... 107698 BLAKE ... 30...7934 MILLER... 10

EMP

DEPTNO DBAME LOC------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPTNO DBAME LOC------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPT

EMPNO DEPTO LOC----- ----- ----------7839 10 NEW YORK7398 30 CHICAGO7782 10 NEW YORK7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO...(14 row(s) affected)

EMPNO DEPTO LOC----- ----- ----------7839 10 NEW YORK7398 30 CHICAGO7782 10 NEW YORK7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO...(14 row(s) affected)

Page 4: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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.columnFROM table1 INNER JOIN table2

ON table1.column1 = table2.column2;

SELECT table1.column, table2.columnFROM table1 INNER JOIN table2

ON table1.column1 = table2.column2;

Page 5: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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.columnFROM table1, table2WHERE table1.column1 = table2.column2;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 = table2.column2;

Page 6: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-6

Producto cartesiano

a

b

c

A

x

y

Ba x

a y

b x

b y

c x

c y

A x B

x =

Page 7: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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.

Page 8: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-8

Generar un producto cartesiano

EMPNO ENAME ... DEPTNO---- ----- ... ------7839 KING ... 107698 BLAKE ... 30...7934 MILLER... 10

EMPNO ENAME ... DEPTNO---- ----- ... ------7839 KING ... 107698 BLAKE ... 30...7934 MILLER... 10

EMP (14 rows)

DEPTNO DBAME LOC------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPTNO DBAME LOC------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPT (4 rows)

ENAME DNAME----------- ----------KING ACCOUNTINGBLAKE ACCOUNTING...KING RESEARCHBLAKE RESEARCH...(56 row(s) affected)

ENAME DNAME----------- ----------KING ACCOUNTINGBLAKE ACCOUNTING...KING RESEARCHBLAKE RESEARCH...(56 row(s) affected)

Producto cartesiano: 14*4 =56 renglones

Page 9: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-9

Tipos de Join’s

• Equijoin• Non-equijoin

• Outer join• Self join

Page 10: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-10

¿Qué es un Equijoin ?

EMPNO ENAME DEPTNO---- ----- ------7839 KING 107698 BLAKE 307782 CLARK 107566 JONES 207654 MARTIN 307499 ALLEN 307844 TURNER 307900 JAMES 307521 WARD 307902 FORD 207369 SMITH 20...14 row(s) selected.

EMPNO ENAME DEPTNO---- ----- ------7839 KING 107698 BLAKE 307782 CLARK 107566 JONES 207654 MARTIN 307499 ALLEN 307844 TURNER 307900 JAMES 307521 WARD 307902 FORD 207369 SMITH 20...14 row(s) selected.

EMP

DEPTNO DBAME 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 row(s) selected.

DEPTNO DBAME 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 row(s) selected.

DEPT

Foreign Key Primary Key

Page 11: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-11

Recuperación de renglones con Equijoins (inner)

SELECT emp, empno, emp.ename, emp.deptno,dept.deptno, dept.loc

FROM emp INNER JOIN deptON emp.deptno=dept.deptno;

SELECT emp, empno, emp.ename, emp.deptno,dept.deptno, dept.loc

FROM emp INNER JOIN deptON emp.deptno=dept.deptno;

empno ename deptno deptno loc---------------- ---------- ---------- -------------7369 SMITH 20 20 DALLAS7499 ALLEN 30 30 CHICAGO7521 WARD 30 30 CHICAGO7566 JONES 20 20 DALLAS....14 row(s) affected.

empno ename deptno deptno loc---------------- ---------- ---------- -------------7369 SMITH 20 20 DALLAS7499 ALLEN 30 30 CHICAGO7521 WARD 30 30 CHICAGO7566 JONES 20 20 DALLAS....14 row(s) affected.

Page 12: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-12

Recuperación de renglones con Equijoins (inner)

SELECT emp.empno, emp.ename, emp.deptno,dept.deptno, dept.loc

FROM emp, deptWHERE emp.deptno=dept.deptno;

SELECT emp.empno, emp.ename, emp.deptno,dept.deptno, dept.loc

FROM emp, deptWHERE emp.deptno=dept.deptno;

empno ename deptno deptno loc---------------- ---------- ---------- -------------7369 SMITH 20 20 DALLAS7499 ALLEN 30 30 CHICAGO7521 WARD 30 30 CHICAGO7566 JONES 20 20 DALLAS....14 row(s) affected.

empno ename deptno deptno loc---------------- ---------- ---------- -------------7369 SMITH 20 20 DALLAS7499 ALLEN 30 30 CHICAGO7521 WARD 30 30 CHICAGO7566 JONES 20 20 DALLAS....14 row(s) affected.

Page 13: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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.

Page 14: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-14

Utilizando condiciones adicionales

EMPNO ENAME DEPTNO---- ----- ------7839 KING 107698 BLAKE 307782 CLARK 107566 JONES 207654 MARTIN 307499 ALLEN 307844 TURNER 307900 JAMES 307521 WARD 307902 FORD 207369 SMITH 20...14 row(s) selected.

EMPNO ENAME DEPTNO---- ----- ------7839 KING 107698 BLAKE 307782 CLARK 107566 JONES 207654 MARTIN 307499 ALLEN 307844 TURNER 307900 JAMES 307521 WARD 307902 FORD 207369 SMITH 20...14 row(s) selected.

EMP

DEPTNO DBAME 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 row(s) selected.

DEPTNO DBAME 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 row(s) selected.

DEPT

Page 15: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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 deptON emp.deptno=dept.deptno;

SELECT emp, empno, emp.ename, emp.deptno,dept.deptno, dept.loc

FROM emp INNER JOIN deptON emp.deptno=dept.deptno;

SELECT e, empno, e.ename, e.deptno,d.deptno, d.loc

FROM emp e INNER JOIN dept dON e.deptno=d.deptno;

SELECT e, empno, e.ename, e.deptno,d.deptno, d.loc

FROM emp e INNER JOIN dept dON e.deptno=d.deptno;

Page 16: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-16

Reunir más de dos tablas

NAME CUSTID-------------- --------JACKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107...9 row(s) selected.

NAME CUSTID-------------- --------JACKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107...9 row(s) selected.

CUSTOMER

CUSTID ORDID---------- --------

101 610102 611104 612106 601102 602106 605106 605

...21 row(s) selected.

CUSTID ORDID---------- --------

101 610102 611104 612106 601102 602106 605106 605

...21 row(s) selected.

ORD

ORDID ITEMID--------- -------

610 3611 1612 1601 1602 1

...64 rows selected.

ORDID ITEMID--------- -------

610 3611 1612 1601 1602 1

...64 rows selected.

ITEM

Page 17: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-17

Non-Equijoins

EMPNO ENAME SAL---- ---------- ------7839 KING 50007698 BLAKE 28507782 CLARK 24507654 MARTIN 12507499 ALLEN 16007844 TURNER 15007900 JAMES 950...14 row(s) selected.

EMPNO ENAME SAL---- ---------- ------7839 KING 50007698 BLAKE 28507782 CLARK 24507654 MARTIN 12507499 ALLEN 16007844 TURNER 15007900 JAMES 950...14 row(s) selected.

EMP

GRADE LOSAL HISAL----- ----- -----1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999

GRADE LOSAL HISAL----- ----- -----1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999

SALGRADE

“salario en la tabla EMP se encuentra entre low salary y high salary en la tabla SALGRADE”

Page 18: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-18

Recuperar registros con Non-equijoins

SELECT e.ename, e.sal, s.gradeFROM emp e JOIN salgrade s

ON e.sal BETWEEN S.LOSAL and S.hisal;

SELECT e.ename, e.sal, s.gradeFROM emp e JOIN salgrade s

ON e.sal BETWEEN S.LOSAL and S.hisal;

ENAME SAL GRADE ---------- ---------- ------JAMES 950 1SMITH 800 1ADAMS 1100 1...14 row(s) selected.

ENAME SAL GRADE ---------- ---------- ------JAMES 950 1SMITH 800 1ADAMS 1100 1...14 row(s) selected.

Page 19: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-19

Outer Joins (LEFT | RIGHT)

ENAME DEPTNO---------- ------KING 10BLAKE 30CLARK 10JONES 20...

ENAME DEPTNO---------- ------KING 10BLAKE 30CLARK 10JONES 20...

EMP

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

SALGRADE

No existen empleados en el departamento “OPERATIONS”

Page 20: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-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

SELECT tablek.columnl, tablem.columnp

FROM table1 LEFT OUTER JOIN tableq

ON table1.columnl = tableq.columnp

SELECT tablek.columnl, tablem.columnp

FROM table1 RIGHT OUTER JOIN tableq

ON table1.columnl = tableq.columnp

SELECT tablek.columnl, tablem.columnp

FROM table1 RIGHT OUTER JOIN tableq

ON table1.columnl = tableq.columnp

Page 21: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-21

Utilizando Outer Joins

SELECT e.ename, d.deptno, d.dnameFROM emp e RIGHT OUTER JOIN dept d

ON e.deptno = d.deptnoORDER BY d.deptno;

SELECT e.ename, d.deptno, d.dnameFROM emp e RIGHT OUTER JOIN dept d

ON e.deptno = d.deptnoORDER BY d.deptno;

ENAME DEPTNO DNAME ---------- ---------- -----------KING 10 ACCOUNTINGSMITH 10 ACCOUNTING...

40 OPERATIONS15 row(s) selected.

ENAME DEPTNO DNAME ---------- ---------- -----------KING 10 ACCOUNTINGSMITH 10 ACCOUNTING...

40 OPERATIONS15 row(s) selected.

Page 22: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-22

Self Joins

EMPNO ENAME MGR---- ---------- ------7839 KING7698 BLAKE 78397782 CLARK 78397654 JONES 78397499 MARTIN 76987844 ALLEN 7698

EMPNO ENAME MGR---- ---------- ------7839 KING7698 BLAKE 78397782 CLARK 78397654 JONES 78397499 MARTIN 76987844 ALLEN 7698

EMP (WORKER)

EMPNO ENAME---- --------

7839 KING7839 KING7839 KING7698 BLAKE7698 BLAKE

EMPNO ENAME---- --------

7839 KING7839 KING7839 KING7698 BLAKE7698 BLAKE

EMP(MANAGER)

MGR en la tabla WORKER es igual a EMPNO en la tabla

MANAGER

Page 23: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-23

Haciendo Join con la misma tabla

SELECT worker.ename + ‘ works for ‘ + manager.enameFROM emp worker JOIN emp manager

ON worker.mgr = manager.empno;

SELECT worker.ename + ‘ works for ‘ + manager.enameFROM emp worker JOIN emp manager

ON worker.mgr = manager.empno;

WORKER.ENAME||’WORKS FOR’||MANAG --------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 row(s) selected.

WORKER.ENAME||’WORKS FOR’||MANAG --------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 row(s) selected.

Page 24: SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5

SQL ServerDesplegando datos de múltiples tablas 5-24

Prácticas

• Utilice equi-joins para unir tablas.• Ejecute outer-joins y self-joins.• Agregue condiciones adicionales.