Uso de los JOINS en MYSQL

Slides:



Advertisements
Presentaciones similares
Consultas en Visual FoxPro
Advertisements

SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
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.
integridad referencial
Estadísticas en SQL Server Rocío Contreras Águila, Primer Semestre 2010.
SQL Server Integration Services SSIS
Mejoras a la Cláusula GROUP BY
Consultas anidadas.
Teórico: Algebra Relacional
Lenguaje de consulta de Hibernate
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
• SQL Server Integration Services SSIS
PL/SQL Francisco Moreno Universidad Nacional.
Lenguaje SQL (Structured Query Language)
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 5 Agregando Datos Usando Funciones de Grupo.
“Optimización de sentencias MySQL” jueves 26 de septiembre de 2013.
UNIDAD 2:Crear, abrir y cerrar una base de datos Hacer clic sobre la opción Nuevo de la pestaña Archivo. Se mostrarán las distintas opciones para nuevos.
Subconsultas Avanzadas
6 Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Visualización de Datos de Varias Tablas Utilizando Uniones.
Componentes sintácticos
F Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Sintaxis de Unión en Oracle.
Geo procesos.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 6 Subconsultas.
Dr. Mario Rossainz López Aplicaciones WEB Primavera 2015.
COMANDOS SQL.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Desplegando datos de múltiples tablas
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
ESCUELA TECNOLÓGICA INSTITUTO TÉCNICO CENTRAL Ing. Johanna Vargas Esp. Gerencia de proyectos.
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
Autora: Francisca Montañez Muñoz
Consultas SQL (Base de Datos)
INSTRUCCIONES Elaboración de la Presentación:
LENGUAJE SQL.
Bases de Datos Sql.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Expresiones algebraicas equivalentes
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.
LENGUAJE ESTRUCTURADO DE CONSULTAS
Lenguaje Estructurado de Consulta
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Prof. De Bases de Datos: Lcdo. Luis Peña. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query.
CONBINACION DE CORRESPONDENCIA
Tipos de Datos.
 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.
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.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
HINTS ¿Cómo afectar el plan de ejecución? Por defecto, el SGBD tomará en cuenta el camino de ejecución (Execution Path) determinado por el optimizador.
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.
Bases de Datos SQL.
Unidad 6. Tema 4. Lenguaje de consultas SQL
Copyright  Oracle Corporation, All rights reserved. 4 Visualización de datos de varias tablas.
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.
DLM Transact SQL Sesión II Recuperación de información.
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.
DML Transact SQL Sesión VI Trabajando con subconsultas.
DML Transact SQL Sesión V Consultando múltiples tablas.
Crear una tabla (create table - sp_tables - sp_columns - drop table) Para ver las tablas existentes creadas por los usuarios en una base de datos usamos.
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.
Transcripción de la presentación:

Uso de los JOINS en MYSQL

Un join es una operación que relaciona dos o más tablas para obtener un resultado que incluya datos (campos y registros) de ambas Un JOIN se utiliza para consultar datos de más de una tabla La condición de JOIN se escribe en la cláusula WHERE. Si existen columnas con el mismo nombre en las tablas seleccionadas, se deberán nombrar los campos

Tipos de joins

Existen dos tipos principales de Join Tipos de Join’s Existen dos tipos principales de Join Equijoin Non-equijoin Y dos mas adicionales Outer join Self join

Ejemplo de EquiJoin Este se utiliza por ejemplo en estos esquemas Select e.empno, e.ename, e.job, d.dname From emp e, dept d Where e.deptno = d.deptno;

Ejemplo de EquiJoin EQUIJOIN Join sobre dos o más tablas, por igualdad de campos. Select emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc From emp,dept Where emp.deptno = dept.deptno; Ya que la columna DEPTNO es igual en ambas tablas esta debe de ir prefijada por el nombre de la tabla para evitar ambigüedad

Ejemplo de EquiJoin También llamado natural Join, es un caso donde solo se usan operadores de igualdad para las condiciones de Join Select emp.ename, dept.dname From emp, dept Where emp.deptno = dept.deptno Select emp.ename, dept.dname From emp NATURAL JOIN dept on emp.deptno = dept.deptno

Ejemplo de EquiJoin Tabla Store_Information Store_name Sales Txn_date Los Angeles 1500 05-Jan-1999 San Diego 2500 07-Jan-1999 3000 08-Jan-1999 Boston 7000 Tabla Geography Region_name Store_name East Boston New York Wets Los Angeles West San Diego

Ejemplo de EquiJoin y queremos saber las ventas por región. Al examinar las dos tablas, encontramos que están enlazadas a través del campo común “nombre_negocio” Entonces la sentencia SQL quedaría de la siguiente manera:

Ejemplo de EquiJoin SELECT A1.Region_Name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.Store_Name = A2.Store_Name GROUP BY A1.Region_Name; Resultado: Region Sales East 700 West 2050

Ejemplo de Non-Equijoin Son un tipo de unión no muy utilizado, que une dos tablas por una condición diferente a la de igualdad Select e.ename, e.sal, s.grade From emp e, salgrade s Where e.sal between s.losal and s.hisal

Ejemplo de Non-Equijoin SELECT v.nombre, v.apellidos, vi.numero_dias, t.nombre FROM viajero v, viaje vi, tipo_estancia t WHERE v.id_viajero = vi.id_viajero AND vi.numero_dias BETWEEN t.dia_desde AND t.dia_hasta ORDER BY fecha;

Ejemplo de Outer Join Select e.ename, d.deptno, d.dname From emp e, dept d Where e.deptno(+) = d.deptno Order by e.deptno; En este ejemplo se muestran los números y nombres de TODOS los departamentos incluidos aquellos que no tienen empleados Si se añade AND emp.deptno is null, solo se mostrarán las no coincidencias

Más ejemplos de Outer Join  ¿Qué sucede en los casos donde estamos interesados en la selección de elementos en una tabla sin importar si se encuentran presentes en la segunda tabla? Ahora necesitaremos utilizar el comando SQL OUTER JOIN.

Más ejemplos de Outer Join Se colocará un "(+)" en la cláusula WHERE del otro lado de la tabla para la que queremos incluir todas las filas. Ejemplo en la siguiente lamina:

Más ejemplos de Outer Join SELECT A1.Store_Name, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.Store_Name = A2.Store_Name (+) GROUP BY A1.Store_Name; Resultado Store_name Sales Boston 700 New York Los Angeles 1800 San Diego 250

Ejemplo de Self Join Select trabajador.ename || ‘ trabaja para ‘ || jefe.ename From emp trabajador emp jefe Where trabajador.mgr = jefe.empno; En este ejemplo la clausula where contiene la combinación “donde un jefe de un trabajador coincide con el número de empleado para el jefe”

Ejemplo bases de datos Create table libros( Codigo number (4), Titulo varchar2 (40) not null, Autor varchar2 (30), Codigoeditorial number (3) not null, Precio number (5,2), Primary key (codigo));

Y la segunda Create table editoriales( Codigo number (3), Nombre varchar2(20) not null, Primary key(codigo));

Consultas Select * from libros; En el campo editorial aparece el código pero no sabemos el nombre de la editorial, necesitamos consultar ambas tablas

Hagamos un Join Select * From libros Join editoriales On libros.codigoeditorial = editoriales.codigo;

Join Un join es una operación que relaciona dos o más tablas para obtener un resultado que incluya datos (campos y registros) de ambas; las tablas participantes se combinan según los campos comunes a ambas tablas.

Hay tres tipos de combinaciones: combinaciones internas (inner join o join), combinaciones externas combinaciones cruzadas.

Analicemos Select * from libros Join editoriales On libros.codigoeditorial = editoriales.codigo; especificamos los campos que aparecerán en el resultado en la lista de selección; Indicamos el nombre de la tabla luego del “from” (“libros”); Combinamos esta tabla con “join”y el nombre de la otra tabla (“editoriales”) se especifica que tablas se vana a combinar y cómo

Analicemos Select * from libros Join editoriales On libros.codigoeditorial = editoriales.codigo; Combinamos esta tabla con “join”y el nombre de la otra tabla (“editoriales”) se especifica que tablas se vana a combinar y cómo Se debe especificar la condición para enlazarlas, es decir, el campo por el cual se combinarán, que tienen en común con “ON”

Analicemos Select * from libros Join editoriales On libros.codigoeditorial = editoriales.codigo; En el ejemplo, si no especificamos "editoriales.codigo" y solamente tipeamos "codigo", Oracle no sabrá si nos referimos al campo "codigo" de "libros" o de "editoriales" y mostrará un mensaje de error indicando que "codigo" es ambiguo.

Analicemos Select * from libros Join editoriales On libros.codigoeditorial = editoriales.codigo; Se puede incluir en la consulta join la cláusula "where" para restringir los registros que retorna el resultado; también "order by", "distinct", etc..

Analicemos Select * from libros Join editoriales On libros.codigoeditorial = editoriales.codigo; Se emplea este tipo de combinación para encontrar registros de la primera tabla que se correspondan con los registros de la otra, es decir, que cumplan la condición del "on". Si un valor de la primera tabla no se encuentra en la segunda tabla, el registro no aparece; si en la primera tabla el valor es nulo, tampoco aparece.

Analicemos Select * From libros Join editoriales On libros.codigoeditorial = editoriales.codigo; Select l.codigo, titulo, autor, nombre From libros l Join editoriales e On l.codigoeditorial = e.codigo;

Left Join Es aquel en el que se unen dos tablas A y B. En esta unión se incluyen todos los registros de A aunque no satisfagan la condición. Para hacer esto, se puede usar el Left Outer Join o el operador (+) en todas las columnas de B en la parte Where. Ejemplo:

Left Join Select e.empno, e.ename, e.job, d.dname From emp e left outer join dept d On e.deptno = d.deptno; From emp e, dept d Where e.deptno = d.deptno (+);

Left Join Si queremos saber qué registros de una tabla NO encuentran correspondencia en la otra, es decir, no existe valor coincidente en la segunda, necesitamos otro tipo de combinación, "outer join" (combinación externa). Las combinaciones externas combinan registros de dos tablas que cumplen la condición, más los registros de la segunda tabla que no la cumplen; es decir, muestran todos los registros de las tablas relacionadas, aún cuando no haya valores coincidentes entre ellas.

Left Join Las combinaciones externas se realizan solamente entre 2 tablas. Hay tres tipos de combinaciones externas: "left outer join", "right outer join" y "full outer join"; se pueden abreviar con "left join", "right join" y "full join" respectivamente.

Left Join Se emplea una combinación externa izquierda para mostrar todos los registros de la tabla de la izquierda. Si no encuentra coincidencia con la tabla de la derecha, el registro muestra los campos de la segunda tabla seteados a "null". Select titulo,nombre From editoriales e left join libros l On codigoeditorial = e.codigo;

Left Join Select titulo,nombre From editoriales e left join libros l on codigoeditorial = e.codigo; El resultado mostrará el título y nombre de la editorial; las editoriales de las cuales no hay libros, es decir, cuyo código de editorial no está presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo".

Left Join Es importante la posición en que se colocan las tablas en un "left join", la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha. En el siguiente ejemplo solicitamos el título y el nombre la editorial, la sentencia es similar a la anterior, la diferencia está en el orden de las tablas:

Left Join Select titulo,nombre From libros l left join editoriales e On codigoeditorial = e.codigo; El resultado mostrará el título del libro y el nombre de la editorial; los títulos cuyo código de editorial no está presente en "editoriales" aparecen en el resultado, pero con el valor "null" en el campo "nombre".

Left Join Un "left join" puede tener clausula "where" que restringa el resultado de la consulta considerando solamente los registros que encuentran coincidencia en la tabla de la derecha, es decir, cuyo valor de código está presente en "libros": select titulo,nombre From editoriales e left join libros l On e.codigo=codigoeditorial Where codigoeditorial is not null;

Left Join También podemos mostrar las editoriales que NO están presentes en "libros", es decir, que NO encuentran coincidencia en la tabla de la derecha: Select titulo,nombre From editoriales e left join libros l On e.codigo=codigoeditorial Where codigoeditorial is null;

right outer join o right join Es aquel en el que se unen dos tablas A y B. En esta unión se incluyen todos los registros de B aunque no satisfagan la condición. Para hacer esto, se puede usar el Right Outer Join o el operador (+) en todas las columnas de A en la parte Where. Ejemplo:

right outer join o right join Select e.empno, e.ename, e.job, d.dname From emp e right outer join dept d On e.deptno = d.deptno; Select e.empno, e.ename, e.job, d.dname From emp e, dept d Where e.deptno (+) = d.deptno;

right outer join o right join Una combinación externa derecha opera del mismo modo sólo que la tabla derecha es la que localiza los registros en la tabla izquierda. Select titulo,nombre as editorial From libros l right join editoriales e On codigoeditorial = e.codigo;

right outer join o right join Es FUNDAMENTAL tener en cuenta la posición en que se colocan las tablas en los "outer join". En un "left join" la primera tabla (izquierda) es la que busca coincidencias en la segunda tabla (derecha); en el "right join" la segunda tabla (derecha) es la que busca coincidencias en la primera tabla (izquierda).

right outer join o right join En la siguiente consulta empleamos un "left join" para conseguir el mismo resultado que el "right join" anterior": Select titulo,nombre From editoriales e left join libros l On codigoeditorial = e.codigo;

right outer join o right join Note que la tabla que busca coincidencias ("editoriales") está en primer lugar porque es un "left join"; en el "right join" precedente, estaba en segundo lugar.

right outer join o right join Un "right join" también puede tener cláusula "where" que restringa el resultado de la consulta considerando solamente los registros que encuentran coincidencia en la tabla izquierda: Select titulo,nombre From libros l right join editoriales e On e.codigo=codigoeditorial Where codigoeditorial is not null;

right outer join o right join Mostramos las editoriales que NO están presentes en "libros", es decir, que NO encuentran coincidencia en la tabla de la derecha empleando un "right join": Select titulo,nombre From libros l right join editoriales e On e.codigo=codigoeditorial Where codigoeditorial is null;

full outer join o full join Finalmente, este join es la combinación del right outer join y el left outer join; mostrándonos la información de ambas tablas unidas A y B no importando que haya registros que no satisfagan la condición. Para realizar esto, se usa la cláusula Full Outer Join o un Union con los dos querys del operador (+) como se puede apreciar en los ejemplos siguientes:

full outer join o full join Select e.empno, e.ename, e.job, d.dname From emp e full outer join dept d On e.deptno = d.deptno; From emp e, dept d Where e.deptno (+) = deptno Union Where e.deptno = d.deptno (+);

full outer join o full join Una combinación externa completa retorna todos los registros de ambas tablas. Si un registro de una tabla izquierda no encuentra coincidencia en la tabla derecha, las columnas correspondientes a campos de la tabla derecha aparecen seteadas a "null", y si la tabla de la derecha no encuentra correspondencia en la tabla izquierda, los campos de esta última aparecen conteniendo "null".

full outer join o full join Select titulo,nombre From editoriales e full join libros l On codigoeditorial = e.codigo; La salida del "full join" precedente muestra todos los registros de ambas tablas, incluyendo los libros cuyo código de editorial no existe en la tabla "editoriales" y las editoriales de las cuales no hay correspondencia en "libros".

cross join Las combinaciones cruzadas muestran todas las combinaciones de todos los registros de las tablas combinadas. Para este tipo de join no se incluye una condición de enlace. Se genera el producto cartesiano en el que el número de filas del resultado es igual al número de registros de la primera tabla multiplicado por el número de registros de la segunda tabla, es decir, si hay 3 registros en una tabla y 4 en la otra, retorna 12 filas.

cross join Select c.nombre as "plato principal", p.nombre as "postre" From comidas c cross join postres p; Este tipo de join no es muy utilizado.

Self Join Es un join de una tabla consigo misma. Se realiza de manera similar a un join normal; la diferencia sustancial, reside en que será comparada y unida por algún campo de la misma tabla. Un ejemplo claro de esto, es cuando se quiere mostrar el jefe de cada empleado en nuestra tabla emp 

Self Join Select emp.empno, emp.ename, emp.job, mgr.ename, mgr.job From emp emp, emp mgr Where emp.mgr = mgr.empno;

Self Join Un pequeño restaurante tiene almacenadas sus comidas en una tabla llamada "comidas" que consta de los siguientes campos: nombre varchar(20), precio decimal (4,2) y rubro char(6) -- que indica con 'plato' si es un plato principal y 'postre' si es postre

Self Join Podemos obtener la combinación de todos los platos empleando un "cross join" con una sola tabla: Select c1.nombre, c2.nombre, c1.precio+c2.precio as total From comidas c1 Cross join comidas c2;

Self Join En la consulta anterior aparecerán filas duplicadas, para evitarlo debemos emplear un "where": select c1.nombre as "plato principal", c2.nombre as postre, c1.precio+c2.precio as total From comidas c1 Cross join comidas c2 Where c1.rubro='plato' and c2.rubro='postre';

Self Join También se puede realizar una autocombinación con "join": select c1.nombre as "plato principal", c2.nombre as postre, c1.precio+c2.precio as total From comidas c1 join comidas c2 On c1.codigo<>c2.codigo where c1.rubro='plato' and c2.rubro='postre';

Conclusiones Para resumir hemos llamado T1 y T2 las tablas de las que queremos sacar los datos y R la tabla lógica que representa el resultado de consulta. T1 y T2 podrían ser tablas guardadas o consultas. En la última parte cuando se pregunta "En T1 hay filas que no tienen pareja en T2", la pregunta se debe de interpretar como "en alguna de las tablas hay filas que no tienen pareja".

Conclusiones

Conclusiones Los Joins son muy útiles para traer información de dos o más tablas y poder combinar la información que reside en ellas. Un abuso o mal uso de ellos sin embargo, puede causar dolores serios de cabeza. Para saber si estamos haciendo o no un buen query, requerimos acudir a nuestro plan de ejecución y/o algún trace para saber si realmente, es correcto lo que estamos construyendo.