SQL Server Desplegando datos de múltiples tablas 5-1 Desplegando datos de múltiples tablas 5.
-
Upload
elodia-lombardo -
Category
Documents
-
view
226 -
download
5
Transcript of 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
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
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)
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;
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;
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 =
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.
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
SQL ServerDesplegando datos de múltiples tablas 5-9
Tipos de Join’s
• Equijoin• Non-equijoin
• Outer join• Self join
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
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.
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.
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.
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
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;
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
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”
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.
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”
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
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.
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
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.
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.