Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porEugenio Figueroa Medina Modificado hace 9 años
1
Copyright Oracle Corporation, 1998. All rights reserved. 4 Visualización de datos de varias tablas
2
4-2 Copyright Oracle Corporation, 1998. All rights reserved. Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Escribir sentencias SELECT para acceder a datos de más de una tabla usando uniones de igualdad y de no igualdad. Escribir sentencias SELECT para acceder a datos de más de una tabla usando uniones de igualdad y de no igualdad. Visualizar datos no cumplen condición de unión usando uniones externas. Visualizar datos no cumplen condición de unión usando uniones externas. Unir una tabla consigo misma usando una autounión. Unir una tabla consigo misma usando una autounión.
3
4-3 Copyright Oracle Corporation, 1998. All rights reserved. EMPNO DEPTNO LOC ----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO... 14 rows selected. EMPNO DEPTNO LOC ----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO... 14 rows selected. Obtención de datos de varias tablas EMPLOYEESDEPARTMENTS EMPNOENAME...DEPTNO -----------...------ 7839KING... 10 7698BLAKE... 30... 7934MILLER... 10 DEPTNO DNAME LOC ------ ------------------ 10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON
4
4-4 Copyright Oracle Corporation, 1998. All rights reserved. Producto cartesiano Producto cartesiano se forma cuando: Producto cartesiano se forma cuando: – Una condición de join se omite. – Una condición de join no es válida. – Todas las filas de la primer tabla se unen a todas las filas de la segunda. Para evitar un producto cartesiano, incluir una condición de join válida en la cláusula WHERE. Para evitar un producto cartesiano, incluir una condición de join válida en la cláusula WHERE. Producto cartesiano se forma cuando: Producto cartesiano se forma cuando: – Una condición de join se omite. – Una condición de join no es válida. – Todas las filas de la primer tabla se unen a todas las filas de la segunda. Para evitar un producto cartesiano, incluir una condición de join válida en la cláusula WHERE. Para evitar un producto cartesiano, incluir una condición de join válida en la cláusula WHERE.
5
4-5 Copyright Oracle Corporation, 1998. All rights reserved. Generación de un producto cartesiano ENAME DNAME ------ ---------- KINGACCOUNTING BLAKE ACCOUNTING... KINGRESEARCH BLAKE RESEARCH... 160 rows selected. ENAME DNAME ------ ---------- KINGACCOUNTING BLAKE ACCOUNTING... KINGRESEARCH BLAKE RESEARCH... 160 rows selected. DEPT (8 filas) EMPNOENAME...DEPTNO -----------...------ 7839KING... 10 7698BLAKE... 30... 7934MILLER... 10 EMPNOENAME...DEPTNO -----------...------ 7839KING... 10 7698BLAKE... 30... 7934MILLER... 10 DEPTNO DNAME LOC ------ ------------------ 10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON DEPTNO DNAME LOC ------ ------------------ 10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON “Producto Cartesiano: 20*8=160 filas” EMP (20 filas) SELECT ename, dename FROM emp, dept
6
4-6 Copyright Oracle Corporation, 1998. All rights reserved. Tipos de uniones Uniones de propiedad de oracle (8i y anteriores): Unión de igualdad (equijoin). Unión de no igualdad (non-equijoin). Unión externa (outerjoin). Atounión (autojoin). Uniones de propiedad de oracle (8i y anteriores): Unión de igualdad (equijoin). Unión de no igualdad (non-equijoin). Unión externa (outerjoin). Atounión (autojoin).
7
4-7 Copyright Oracle Corporation, 1998. All rights reserved. Tipos de uniones Uniones que cumplen con SQL Uniones cruzadas. Uniones naturales Cláusula USING. Uniones externas completas o de dos lados. Condiciones de unión arbitrarias para uniones externas. Uniones que cumplen con SQL Uniones cruzadas. Uniones naturales Cláusula USING. Uniones externas completas o de dos lados. Condiciones de unión arbitrarias para uniones externas.
8
4-8 Copyright Oracle Corporation, 1998. All rights reserved. Unión de tablas usando sintaxis Oracle Escriba la condición de unión en la cláusula WHERE. Escriba la condición de unión en la cláusula WHERE. En el nombre de columna ponga el nombre de tabla de prefijo si aparece el mismo nombre de columna en más de una tabla. En el nombre de columna ponga el nombre de tabla de prefijo si aparece el mismo nombre de columna en más de una tabla. Escriba la condición de unión en la cláusula WHERE. Escriba la condición de unión en la cláusula WHERE. En el nombre de columna ponga el nombre de tabla de prefijo si aparece el mismo nombre de columna en más de una tabla. En el nombre de columna ponga el nombre de tabla de prefijo si aparece el mismo nombre de columna en más de una tabla. SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
9
4-9 Copyright Oracle Corporation, 1998. All rights reserved. ¿Qué es una unión de igualdad? EMP 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 ACCOUNTINGNEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 20 RESEARCHDALLAS... 14 rows selected. Clave ajena Clave primaria
10
4-10 Copyright Oracle Corporation, 1998. All rights reserved. Recuperación de registros con uniones de igualdad SQL> SELECT emp.empno, emp.ename, emp.deptno, 2dept.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.
11
4-11 Copyright Oracle Corporation, 1998. All rights reserved. Condiciones de búsqueda adicionales usando el operador AND EMPDEPT 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 ACCOUNTINGNEW YORK 30SALES CHICAGO 10 ACCOUNTINGNEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 20 RESEARCHDALLAS... 14 rows selected.
12
4-12 Copyright Oracle Corporation, 1998. All rights reserved. Calificación de nombres de columna ambiguos Usar prefijos de tabla para calificar nombres de columnas que estén en varias tablas. Usar prefijos de tabla para calificar nombres de columnas que estén en varias tablas. Mejorar el rendimiento usando prefijos de tablas. Mejorar el rendimiento usando prefijos de tablas. Distinguir columnas, de idéntico nombre pero pertenecientes a diferentes tablas, usando alias de columnas. Distinguir columnas, de idéntico nombre pero pertenecientes a diferentes tablas, usando alias de columnas. Usar prefijos de tabla para calificar nombres de columnas que estén en varias tablas. Usar prefijos de tabla para calificar nombres de columnas que estén en varias tablas. Mejorar el rendimiento usando prefijos de tablas. Mejorar el rendimiento usando prefijos de tablas. Distinguir columnas, de idéntico nombre pero pertenecientes a diferentes tablas, usando alias de columnas. Distinguir columnas, de idéntico nombre pero pertenecientes a diferentes tablas, usando alias de columnas.
13
4-13 Copyright Oracle Corporation, 1998. All rights reserved. Uso de alias de tabla Ayudan 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;
14
4-14 Copyright Oracle Corporation, 1998. All rights reserved. Unión de más de dos tablas NAMECUSTID ----------------- JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107... 9 rows selected. NAMECUSTID ----------------- 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 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 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 Para unir n tablas, necesita un mínimo de n-1 condiciones de unión. Ex: tres tablas, necesita mínimo de dos uniones.
15
4-15 Copyright Oracle Corporation, 1998. All rights reserved. Uniones de no igualdad EMPSALGRADE “el salario en la tabla EMP, está entre cualquier par de rangos de salario bajo y alto. bajo y alto. 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 7001200 2 12011400 3 14012000 420013000 5 30019999
16
4-16 Copyright Oracle Corporation, 1998. All rights reserved. Recuperación de registros con uniones de no igualdad ENAME SAL GRADE ---------- --------- --------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1... 14 rows selected. SQL> SELECT e.ename, e.sal, s.grade 2FROMemp e, salgrade s 3WHERE e.sal 4BETWEEN s.losal AND s.hisal;
17
4-17 Copyright Oracle Corporation, 1998. All rights reserved. Uniones externas EMP DEPT No hay empleados en el departamento OPERATIONS ENAMEDEPTNO ----------- KING10 BLAKE30 CLARK10 JONES20... DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30 SALES 10 ACCOUNTING 20RESEARCH... 40OPERATIONS
18
4-18 Copyright Oracle Corporation, 1998. All rights reserved. Sintaxis de uniones externas 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 (+). SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column(+) = table2.column; SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column(+) = table2.column; SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column = table2.column(+); SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column = table2.column(+);
19
4-19 Copyright Oracle Corporation, 1998. All rights reserved. Uso de uniones externas SQL> SELECTe.ename, d.deptno, d.dname 2 FROMemp e, dept d 3 WHEREe.deptno(+) = d.deptno 4 ORDER BYe.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING CLARK 10 ACCOUNTING... 40 OPERATIONS 15 rows selected.
20
4-20 Copyright Oracle Corporation, 1998. All rights reserved. Autouniones EMP (WORKER) EMP (MANAGER) “MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER” EMPNOENAME MGR --------------- 7839KING 7698BLAKE7839 7782CLARK7839 7566JONES7839 7654MARTIN7698 7499ALLEN7698 EMPNOENAME ------------- 7839KING 7698BLAKE
21
4-21 Copyright Oracle Corporation, 1998. All rights reserved. Unión de una tabla consigo 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;
22
4-22 Copyright Oracle Corporation, 1998. All rights reserved. Visión General de la Práctica Parte uno Cubre la escritura de consultas para unir tablas utilizando la sintaxis Oracle.
23
4-23 Copyright Oracle Corporation, 1998. All rights reserved. Unión de tablas sintaxis SQL: 1999 Use una unión para consultar datos de más de una tabla. SELECTtable1.column, table2.column FROMtable1 [CROSS JOIN table2] | [NATURAL JOIN table2] | [JOIN table 2 USING (column_name) | [JOIN table2 ON (table1.column_name = table2.column_name)] | [LEFT | RIGHT | FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)]; SELECTtable1.column, table2.column FROMtable1 [CROSS JOIN table2] | [NATURAL JOIN table2] | [JOIN table 2 USING (column_name) | [JOIN table2 ON (table1.column_name = table2.column_name)] | [LEFT | RIGHT | FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)];
24
4-24 Copyright Oracle Corporation, 1998. All rights reserved. Creación de uniones cruzadas La cláusula CROSS JOIN produce varios productos entre dos tablas. Es lo mismo que un producto cartesiano. La cláusula CROSS JOIN produce varios productos entre dos tablas. Es lo mismo que un producto cartesiano. SELECT last_name, department_name FROM employees CROSS JOIN department; SELECT last_name, department_name FROM employees CROSS JOIN department;
25
4-25 Copyright Oracle Corporation, 1998. All rights reserved. Creación de uniones naturales La cláusula NATURAL JOIN se basa en todas las columnas de dos tablas con mismo nombre. Selecciona filas de las dos tablas con mismos valores en las columnas coincidentes. Si las columnas de mismo nombre tienen tipo de datos distintos, devuelve error. La cláusula NATURAL JOIN se basa en todas las columnas de dos tablas con mismo nombre. Selecciona filas de las dos tablas con mismos valores en las columnas coincidentes. Si las columnas de mismo nombre tienen tipo de datos distintos, devuelve error.
26
4-26 Copyright Oracle Corporation, 1998. All rights reserved. Recuperación de registros con uniones naturales SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations; SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations; Con una cláusula WHERE se implementan restricciones adicionales sobre una unión natural.
27
4-27 Copyright Oracle Corporation, 1998. All rights reserved. Creación de uniones con cláusula USING Usarla cuando: – Varias columnas tienen mismo nombre pero los tipos de dato no coinciden. Para coincidir solo una columna cuando coincidan varias. No utilice un nombre o alias de tabla en las columnas de referencia. Usarla cuando: – Varias columnas tienen mismo nombre pero los tipos de dato no coinciden. Para coincidir solo una columna cuando coincidan varias. No utilice un nombre o alias de tabla en las columnas de referencia.
28
4-28 Copyright Oracle Corporation, 1998. All rights reserved. Recuperación de registros usando la cláusula USING SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id); SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id);
29
4-29 Copyright Oracle Corporation, 1998. All rights reserved. Creación de uniones con cláusula ON La unión natural se basa en igualdad en las columnas de mismo nombre. Para especificar condiciones arbitrarias o especificar columnas para unir, se utiliza la cláusula ON. La condición de unión se separa de otras condiciones de búsqueda. La cláusula ON facilita la compresión del código. La unión natural se basa en igualdad en las columnas de mismo nombre. Para especificar condiciones arbitrarias o especificar columnas para unir, se utiliza la cláusula ON. La condición de unión se separa de otras condiciones de búsqueda. La cláusula ON facilita la compresión del código.
30
4-30 Copyright Oracle Corporation, 1998. All rights reserved. Recuperación de registros con la cláusula ON SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id); SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id);
31
4-31 Copyright Oracle Corporation, 1998. All rights reserved. Creación de uniones en tres sentidos con la cláusula ON SELECT employee_id, city, department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON d.location_id = l.location_id; SELECT employee_id, city, department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON d.location_id = l.location_id;
32
4-32 Copyright Oracle Corporation, 1998. All rights reserved. Uniones INNER frente a OUTER La unión que devuelve solo filas coincidentes es una unión interna. La unión que devuelve filas coincidentes, así como las filas no coincidentes de la tabla izquierda o derecha, es unión externa izquierda o derecha. La unión que devuelve filas de una unión interna y de una unión izquierda y derecha es unión externa completa. La unión que devuelve solo filas coincidentes es una unión interna. La unión que devuelve filas coincidentes, así como las filas no coincidentes de la tabla izquierda o derecha, es unión externa izquierda o derecha. La unión que devuelve filas de una unión interna y de una unión izquierda y derecha es unión externa completa.
33
4-33 Copyright Oracle Corporation, 1998. All rights reserved. LEFT/RIGHT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id); SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id); SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id); SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);
34
4-34 Copyright Oracle Corporation, 1998. All rights reserved. FULL OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id); SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id); Recupera todas las filas de la tabla EMPLOYEES aunque no haya ninguna coincidencia en DEPARTMENTS y a la inversa.
35
4-35 Copyright Oracle Corporation, 1998. All rights reserved. Condiciones Adicionales SELECT e.last_name, e.department_id, d.department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) WHERE e.manager_id=149; SELECT e.last_name, e.department_id, d.department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) WHERE e.manager_id=149; Podemos aplicar condiciones adicionales en la cláusula WHERE.
36
4-36 Copyright Oracle Corporation, 1998. All rights reserved. Resumen Uniones para visualizar datos de varias tablas en: – Sintaxis de propiedad de Oracle para las versiones 8i y anteriores. – Sintaxis conforme con SQL:1999 a partir de versión 9i. Uniones para visualizar datos de varias tablas en: – Sintaxis de propiedad de Oracle para las versiones 8i y anteriores. – Sintaxis conforme con SQL:1999 a partir de versión 9i.
37
4-37 Copyright Oracle Corporation, 1998. All rights reserved. Visión General de la Práctica Parte dos Cubre la escritura de consultas para unir tablas utilizando la sintaxis SQL:1999.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.