Desplegando datos de múltiples tablas

Slides:



Advertisements
Presentaciones similares
Consultas en Visual FoxPro
Advertisements

SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
SQL Server Comunidad TechNet Regístrate en:
Introducción Lenguaje de manipulación de datos (Data Manipulation Language) Permite a los usuarios llevar a cabo las tareas de consulta o manipulación.
Rocio Contreras Aguila Primer Semestre Para poder ejecutar esto SQL Server nos permite definir datos y nos entrega herramientas para poder exigir.
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP
Consultas anidadas.
Teórico: Algebra Relacional
Lenguaje de consulta de Hibernate
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 2 Restringiendo y Ordenando Datos.
SQL.
Lenguaje SQL (Structured Query Language)
SQL Básico Prof. Nelliud D. Torres.
“Optimización de sentencias MySQL” jueves 26 de septiembre de 2013.
Lenguaje Estructurado de Consultas
Subconsultas Avanzadas
6 Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Visualización de Datos de Varias Tablas Utilizando Uniones.
F Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Sintaxis de Unión en Oracle.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 11 Creando Vistas.
COMANDOS SQL.
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Introducción. OBJETIVOS DE LA LECCION Después de completar esta lección, debería ser capaz de realizar lo siguiente: Listar las características de Oracle10g.
Bases de Datos.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
Programación en Visual Basic Lección #8: SQL Por Antonio F. Huertas.
CONSULTAS SENCILLAS A LA BASE DE DATOS
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
Consultas SQL (Base de Datos)
Introducción.
1 Módulo 4 Sentencias SQL. 2 Objetivos Generales Implementar una base de datos Definir los campos, registros, tablas que se encuentran relacionadas en.
LENGUAJE SQL.
Bases de Datos Sql.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Expresiones algebraicas equivalentes
PROCEDIMIENTOS ALMACENADOS Es una consulta almacenada en la base de datos en un servidor. Los P.A. Mejoran el Rendimiento Disminuyen el tráfico. Los P.A.
Más ejemplos en SQL Francisco Moreno. S sn snombre situacion ciudad S1 Salazar 20 Londres S2 Jaramillo 10 París S3 Bernal30 París S4 Caicedo 20 Londres.
Ingeniería de Sistemas y Modelamiento.
Uso de los JOINS en MYSQL
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
E.U. Informática U.L.P.G.C. E.U. Informática U.L.P.G.C. Introducción a - 1 Introducción a Oracle.
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Lenguaje Estructurado de Consultas
Copyright  Oracle Corporation, All rights reserved. 4 Visualización de datos de varias tablas.
Copyright  Oracle Corporation, All rights reserved. Agenda.
Copyright  Oracle Corporation, All rights reserved. 8 Manipulación de Datos.
Copyright  Oracle Corporation, All rights reserved. 1 Escritura de sentencias SQL SELECT básicas.
INTEGRACION DE LAS TECNOLOGIAS DE LA INFORMACION Y COMUNICACION Implementación de base de datos (Lenguaje de manipulación de datos) Ing. Linda Masias Morales.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
Copyright  Oracle Corporation, All rights reserved. 2 Restricción y ordenación de datos.
Copyright  Oracle Corporation, All rights reserved. 12 Otros Objetos de la Base de Datos.
Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.
Copyright  Oracle Corporation, All rights reserved. 11 Creación de Vistas.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
Copyright  Oracle Corporation, All rights reserved. 3 Funciones de una sola fila.
DML Transact SQL Sesión VI Trabajando con subconsultas.
DML Transact SQL Sesión V Consultando múltiples tablas.
Copyright  Oracle Corporation, All rights reserved. 9 Creación y gestión de tablas.
Selección Condicionada de Filas Uso de la cláusula WHERE La cláusula WHERE restringe las columnas que retorna una consulta según la condición que se imponga.
Copyright  Oracle Corporation, All rights reserved. 6 Subconsultas.
Copyright  Oracle Corporation, All rights reserved. 10 Constraints (Restricciones)
SQL AVANZADO saregune CC 2009.
Sentencias básicas de SQL Parte 2
SQL + PHP + HTML Prof. Martín Contreras.
Normalmente emparejamos tablas que están relacionadas entre sí y una de las columnas de emparejamiento es clave principal, pues en este caso, Cuando una.
Transcripción de la presentación:

Desplegando datos de múltiples tablas 5 Desplegando datos de múltiples tablas

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

Obtener datos de múltiples tablas EMPNO ENAME ... DEPTNO ---- ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER... 10 EMP DEPTNO DBAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON DEPT EMPNO DEPTO LOC ----- ----- ---------- 7839 10 NEW YORK 7398 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... (14 row(s) affected)

¿ 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.column FROM table1 INNER JOIN table2 ON table1.column1 = table2.column2;

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.column FROM table1, table2 WHERE table1.column1 = table2.column2;

Producto cartesiano A x B A B x = a x a y a x b x b y b y c c x c y En matemáticas, el producto cartesiano de dos conjuntos, es el conjunto de todos los pares ordenados de elementos, tales que el primer elemento de cada par pertenece a A y el segundo elemento de cada par pertenece a B. Representado por la siguiente expresión:

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. Producto Cartesiano Cuando una condición-join es inválida o se omite, el resultado es un Producto Cartesiano en el que se combinan cada uno de los renglones de la tabla 1 con todos los de la tabla 2, hasta terminar el último registro de la tabla 1, con todos los de la tabla 2. Un Producto Cartesiano tiende a generar un gran número de renglones (multiplicar la Cardinalidad de la tabla 1 por la Cardinalidad de la tabla 2, y se obtiene la Cardinalidad del producto Cartesiano). Cardinalidad: En el modelo relacional, es el número de renglones de una tabla.

Generar un producto cartesiano EMPNO ENAME ... DEPTNO ---- ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER... 10 EMP (14 rows) DEPTNO DBAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON DEPT (4 rows) ENAME DNAME ----------- ---------- KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH (56 row(s) affected) Producto Cartesiano En el ejemplo se muestran el nombre de los empleados y el de los departamentos de las tablas EMP y DEPT, debido a que no se indicó ninguna condición sobre la cláusula WHERE, todos los renglones (14) de la tabla EMP son unidos (joined) a los renglones (4) de la tabla DEPT, el resultado es una tabla con 56 renglones. Producto cartesiano: 14*4 =56 renglones

Tipos de Join’s Equijoin Non-equijoin Outer join Self join Existen dos tipos principales de condición-join. Equijoins (inner join) Non-eqijoins Existen joins adicionales: Outer Joins (left | right join) Self Joins

¿Qué es un Equijoin ? 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 row(s) selected. EMP DEPTNO DBAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 20 RESEARCH DALLAS ... 14 row(s) selected. DEPT Equijoins Para determinar el nombre de los departamentos a los que pertenece cada empleado, se necesita comparar el valor en la columna DEPTNO de la tabla EMP con los valores de DEPTNO en la tabla DEPT. La relación entre las tablas EMP y DEPT son conocidas como un equijoin, es decir, los valores de las columnas DEPTNO en ambas tablas deben coincidir. Nota: Los equijoins son también llamados simplemente joins o inner joins. Foreign Key Primary Key

Recuperación de renglones con Equijoins (inner) SELECT emp, empno, emp.ename, emp.deptno, dept.deptno, dept.loc FROM emp INNER JOIN dept ON emp.deptno=dept.deptno; empno ename deptno deptno loc ---------------- ---------- ---------- ------------- 7369 SMITH 20 20 DALLAS 7499 ALLEN 30 30 CHICAGO 7521 WARD 30 30 CHICAGO 7566 JONES 20 20 DALLAS .... 14 row(s) affected. Recuperando Renglones con Equijoins En el ejemplo: La cláusula SELECT especifica las columnas a recuperar: Número y nombre del empleado y número del departamento al que está asignado tal empleado, tomados de la tabla EMP. Número del departamento y localización que son columnas de la tabla DEPT. La cláusula FROM especifica las tablas que deberán ser accesadas y el tipo de join que se efectuará entre ellas 8INNER JOIN): Tabla DEPT Tabla EMP ON especifica la condición del join: emp.deptno=dept.deptno; Como la columna DEPTNO es común en ambas tablas debe ser calificado con el nombre de la tabla respectiva.

Recuperación de renglones con Equijoins (inner) SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc FROM emp, dept WHERE emp.deptno=dept.deptno; empno ename deptno deptno loc ---------------- ---------- ---------- ------------- 7369 SMITH 20 20 DALLAS 7499 ALLEN 30 30 CHICAGO 7521 WARD 30 30 CHICAGO 7566 JONES 20 20 DALLAS .... 14 row(s) affected. Recuperando Renglones con Equijoins (continuación) En el ejemplo: La cláusula FROM especifica las tablas que deberán ser accesadas sin especificar el tipo de join que se efectuará entre ellas: Tabla DEPT Tabla EMP La cláusula WHERE especifica como las tablas realizarán el join en este caso es un equi-join: emp.deptno = dept.deptno;

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.

Utilizando condiciones adicionales 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 row(s) selected. EMP DEPTNO DBAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 20 RESEARCH DALLAS ... 14 row(s) selected. DEPT Condiciones adicionales Además del join, puede indicar otros criterios de búsqueda en la cláusula WHERE. Por ejemplo, mostrar el número, el nombre, del número de departamento y la localización del departamento del empleado KING.

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 dept ON emp.deptno=dept.deptno; Usando Alias en las tablas Calificar las columnas con los nombres de las tablas puede consumir tiempo, sobre todo cuando las tablas tienen nombres largos. Puede utilizar alias para renombrar las tablas. En el ejemplo la tabla EMP toma el nombre de E y la tabla DEPT el nombre D. SELECT e, empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;

Reunir más de dos tablas NAME CUSTID -------------- -------- JACKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... 9 row(s) selected. CUSTOMER CUSTID ORDID ---------- -------- 101 610 102 611 104 612 106 601 102 602 106 605 ... 21 row(s) selected. ORD ORDID ITEMID --------- ------- 610 3 611 1 612 1 601 1 602 1 ... 64 rows selected. ITEM Condiciones de búsqueda adicionales En ocasiones necesitará hacer join con mas de dos tablas. Por ejemplo, para mostrar el nombre, las órdenes y los items, el total de cada orden para el cliente TKB SPORT SHOP, necesitará reunir las tablas CUSTOMER, ORD e ITEM.

Non-Equijoins EMPNO ENAME SAL ---- ---------- ------ 7839 KING 5000 ---- ---------- ------ 7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 row(s) selected. EMP GRADE LOSAL HISAL ----- ----- ----- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 SALGRADE Non-equijoins La relación entre las tablas EMP y SALGRADE son un Non-Equijoins, es decir, que ninguna columna de la tabla EMP corresponde directamente a una columna en la tabla SALGRADE. La relación entre estas dos tablas es por la columna LOSAL Y HILASAL de la tabla SALGRADE. La relación se obtiene utilizando otro operador diferente de (=). “salario en la tabla EMP se encuentra entre low salary y high salary en la tabla SALGRADE”

Recuperar registros con Non-equijoins SELECT e.ename, e.sal, s.grade FROM emp e JOIN salgrade s ON e.sal BETWEEN S.LOSAL and S.hisal; ENAME SAL GRADE ---------- ---------- ------ JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 row(s) selected. Recuperación de Registros con Non-Equijoins El ejemplo crea un non-equijoin para evaluar qué nivel tiene el salario de cada empleado. Este salario debe estar entre cualquier rango de lowsal y hisal de la tabla SALGRADE. Puede utilizar el método tradicional:

Outer Joins (LEFT | RIGHT) ENAME DEPTNO ---------- ------ KING 10 BLAKE 30 CLARK 10 JONES 20 ... EMP DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30 SALES 20 RESEARCH ... 40 OPERATIONS SALGRADE Outer Joins (LEFT | RIGHT) Si los renglones no satisfacen la condición join, entonces el renglón no aparecerá en el resultado del query. Por ejemplo, en el equi-join de EMP y DEPT, el departamento OPERATIONS no aparee debido a que ningún empleado trabaja en ese departamento. No existen empleados en el departamento “OPERATIONS”

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 Outer Joins Los renglones que no cumplen con la condición pueden ser mostrados dependiendo de que lado de la “junta” se encuentren. Utilice las palabras LEFT o RIGHT dependiendo de que lado se encuentran los registros que desee que aparezcan aun cuando no cumplan la condición-join. Nota: Este método no se aplica de la misma forma que los demás tipos de join para el método tradicional (de colocar la condición-join en la cláusula WHERE), por lo que cada manejador utiliza su propia sintaxis para implementar este tipo de joins. Por ejemplo, en ORACLE se utiliza el operador “+” del lado de la condición que evaluará el LEFT o RIGHT. SELECT tablek.columnl, tablem.columnp FROM table1 RIGHT OUTER JOIN tableq ON table1.columnl = tableq.columnp

Utilizando Outer Joins SELECT e.ename, d.deptno, d.dname FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno ORDER BY d.deptno; ENAME DEPTNO DNAME ---------- ---------- ----------- KING 10 ACCOUNTING SMITH 10 ACCOUNTING ... 40 OPERATIONS 15 row(s) selected. Uso de Outer Joins Coloque la palabra LEFT o RIGHT del lado que desee mostrar los renglones con la deficiencia de información.

MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER Self Joins EMPNO ENAME MGR ---- ---------- ------ 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7654 JONES 7839 7499 MARTIN 7698 7844 ALLEN 7698 EMP (WORKER) EMPNO ENAME ---- -------- 7839 KING 7698 BLAKE EMP(MANAGER) Self Joins En ocasiones se necesitará hacer un join con la misma tabla. Para encontrar el nombre del jefe de cada empleado, se necesita hacer un join de EMP consigo misma. Por ejemplo, para encontrar el nombre del “Jefe” de Blake, se necesita: Encontrar a Blake en la tabla EMP, mediante la columna ENAME. Encontrar el número de jefe para Blake en la columna MGR. El número de jefe de Blake es 7839. Encontrar el nombre del jefe con EMPNO=7839, mirando en la columna ENAME, King es el nombre que tiene el número 7839. De tal forma que King es el jefe de Blake. MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER

Haciendo Join con la misma tabla SELECT worker.ename + ‘ works for ‘ + manager.ename FROM emp worker JOIN emp manager ON worker.mgr = manager.empno; WORKER.ENAME||’WORKS FOR’||MANAG -------------------------------- BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 row(s) selected. Haciendo un Join en la misma tabla Un self-join puede ser implementado con el método tradicional de la siguiente forma:

Prácticas Utilice equi-joins para unir tablas. Ejecute outer-joins y self-joins. Agregue condiciones adicionales.