ORACLE SQL DBA Leccion 04 (Español)

37
4 Copyright © Oracle Corporation, 2001. Todos los derechos reservados. Visualización de Datos de Varias Tablas

Transcript of ORACLE SQL DBA Leccion 04 (Español)

Page 1: ORACLE SQL DBA Leccion 04 (Español)

4Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Visualización de Datosde Varias Tablas

Page 2: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Objetivos

Al finalizar esta lección, debería estar capacitado para:• Escribir sentencias SELECT para acceder a datos de

más de una tabla utilizando uniones de igualdad y de no igualdad

• Visualizar datos que generalmente no cumplen una condición de unión utilizando uniones externas

• Unir una tabla consigo misma utilizando una autounión

Page 3: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Obtención de Datos de Varias TablasEMPLOYEES DEPARTMENTS

Page 4: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Productos Cartesianos

• Un producto Cartesiano se forma cuando:– Una condición de unión está omitida. – Una condición de unión no es válida. – Todas las filas de la primera tabla se unen a todas

las filas de la segunda tabla. • Para evitar un producto Cartesiano, incluya siempre

una condición de unión válida en una cláusula WHERE.

Page 5: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Generación de un Producto Cartesiano

ProductoCartesiano:

20x8=160 filas

EMPLOYEES (20 filas) DEPARTMENTS (8 filas)

Page 6: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

• Unión de igualdad • Unión de no igualdad • Unión externa • Autounión

Tipos de Uniones

• 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: 1999:

Uniones de Propiedad de Oracle (8i y anterior):

Page 7: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Unión de Tablas Utilizandola Sintaxis Oracle

Utilice una unión para consultar datos de más deuna tabla.

• Escriba la condición de unión en la cláusula WHERE.• Escriba en el nombre de columna el nombre de tabla

como prefijo si aparece el mismo nombre de columna en más de una tabla.

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

Page 8: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

¿Qué Es una Unión de Igualdad? EMPLOYEES DEPARTMENTS

Clave ajena Clave primaria

… …

Page 9: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_idFROM employees, departmentsWHERE employees.department_id = departments.department_id;

Recuperación de Registroscon Uniones de Igualdad

Page 10: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Condiciones de Búsqueda Adicionales Utilizando el Operador AND

EMPLOYEES DEPARTMENTS

… …

Page 11: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Cualificación de Nombresde Columna Ambiguos

• Utilice prefijos de tabla para cualificar nombres de columna que estén en varias tablas.

• Mejore el rendimiento utilizando prefijos de tabla.• Distinga las columnas que tengan nombres idénticos

pero que residan en tablas diferentes utilizando alias de columna.

Page 12: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e , departments dWHERE e.department_id = d.department_id;

Uso de Alias de Tabla

• Simplifique las consultas utilizando alias de tabla.• Mejore el rendimiento utilizando prefijos de tabla.

Page 13: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Unión de Más de Dos Tablas EMPLOYEES LOCATIONS DEPARTMENTS

• Para unir n tablas, necesita un mínimo de n-1 condiciones de unión. Por ejemplo, para unir tres tablas, se requiere un mínimo de dos uniones.

Page 14: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Uniones de No Igualdad

EMPLOYEES JOB_GRADES

El salario de la tablaEMPLOYEES debe estarentre el salario menor yel mayor de la tabla JOB_GRADES.

Page 15: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Recuperación de Registroscon Uniones de No Igualdad

SELECT e.last_name, e.salary, j.grade_levelFROM employees e, job_grades jWHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

Page 16: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Uniones Externas

EMPLOYEESDEPARTMENTS

No hay empleados en el departamento 190.

Page 17: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Sintaxis de Uniones Externas

• También puede utilizar una unión externa para ver filas que no cumplen la condición de unión.

• El operador de unión externa es el signo más (+).

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);

Page 18: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+) = d.department_id ;

Uso de Uniones Externas

Page 19: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Autouniones

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

MANAGER_ID en la tabla WORKER es igual a EMPLOYEE_ID en la tabla MANAGER.

… …

Page 20: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Unión de una Tabla Consigo Misma

SELECT worker.last_name || ' works for ' || manager.last_nameFROM employees worker, employees managerWHERE worker.manager_id = manager.employee_id ;

Page 21: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Práctica 4, Parte Uno: Visión General

Esta práctica cubre la escritura de consultas paraunir tablas utilizando la sintaxis Oracle.

Page 22: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Unión de Tablas Utilizando la Sintaxis SQL: 1999

Utilice una unión para consultar datos de más de una tabla.SELECT table1.column, table2.columnFROM table1[CROSS JOIN table2] |[NATURAL JOIN table2] |[JOIN table2 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)];

Page 23: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Creación de Uniones Cruzadas

• La cláusula CROSS JOIN produce varios productos entre dos tablas.

• Es lo mismo que un producto Cartesiano entre las dos tablas.

SELECT last_name, department_nameFROM employeesCROSS JOIN departments ;

Page 24: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Creación de Uniones Naturales

• La cláusula NATURAL JOIN se basa en todas las columnas de las dos tablas que tienen el mismo nombre.

• Selecciona filas de las dos tablas que tienen los mismos valores en todas las columnas coincidentes.

• Si las columnas que tienen el mismo nombre tienen distintos tipos de dato, se devuelve un error.

Page 25: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT department_id, department_name, location_id, cityFROM departmentsNATURAL JOIN locations ;

Recuperación de Registros conUniones Naturales

Page 26: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Creación de Uniones con la Cláusula USING

• Si varias columnas tienen los mismos nombres pero los tipos de dato no coinciden, la cláusula NATURAL JOIN se puede modificar con la cláusula USING para especificar las columnas que se deben utilizar para una unión de igualdad.

• Utilice la cláusula USING para hacer coincidir solamente una columna cuando coincidan varias.

• No utilice un nombre o alias de tabla en las columnas de referencia.

• Las cláusulas NATURAL JOIN y USING son mutuamente excluyentes.

Page 27: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;

Recuperación de Registros con la Cláusula USING

Page 28: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Creación de Uniones con la Cláusula ON

• La condición de unión para la unión natural es básicamente una unión de igualdad de todas las columnas con el 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 comprensión del código.

Page 29: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id);

Recuperación de Registros con la Cláusula ON

Page 30: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Creación de Uniones en Tres Sentidos con la Cláusula ON

SELECT employee_id, city, department_nameFROM employees e JOIN departments dON d.department_id = e.department_id JOIN locations lON d.location_id = l.location_id;

Page 31: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Uniones INNER frente a OUTER

• En SQL: 1999, la unión de dos tablas que devuelve solamente las filas coincidentes es una unión interna.

• Una unión entre dos tablas que devuelve los resultados de la unión interna así como las tablas izquierda (o derecha) de filas no coincidentes es una unión externa izquierda (o derecha).

• Una unión entre dos tablas que devuelve los resultados de una unión interna así como los de una unión izquierda y derecha es una unión externa completa.

Page 32: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id) ;

LEFT OUTER JOIN

Page 33: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id) ;

RIGHT OUTER JOIN

Page 34: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id) ;

FULL OUTER JOIN

Page 35: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id)AND e.manager_id = 149 ;

Condiciones Adicionales

Page 36: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Resumen

En esta lección, debería haber aprendido a utilizar uniones para visualizar datos de varias tablas en:• Sintaxis de propiedad de Oracle para las versiones 8i

y anteriores• Sintaxis conforme con SQL: 1999 para la versión 9i

Page 37: ORACLE SQL DBA Leccion 04 (Español)

4- Copyright © Oracle Corporation, 2001. Todos los derechos reservados.

Práctica 4, Parte Dos: Visión General

Esta práctica cubre los siguientes temas:• Unión de tablas utilizando una unión de igualdad • Realización de uniones externas y autouniones • Adición de condiciones