Tipos de articulaciones
Cruz ÚNETE
Cross JOIN es una forma más simple de JOIN que hace coincidir cada fila de una tabla de base de datos con cada otro conjunto de filas.
Es decir, nos da una combinación de todas las filas de la primera tabla con todos los registros de la segunda tabla.
Supongamos que queremos obtener todos los registros de miembros frente a todos los registros de películas, podemos usar el script que se muestra a continuación para obtener los resultados deseados.
SELECT * FROM `movies` CROSS JOIN `members`
La ejecución del script anterior en un banco de trabajo MySQL nos da los siguientes resultados.
id title id first_name last_name movie_id 1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1 1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2 1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5 1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8 1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10 2 Real Steel(2012) Animations 1 Adam Smith 1 2 Real Steel(2012) Animations 2 Ravi Kumar 2 2 Real Steel(2012) Animations 3 Susan Davidson 5 2 Real Steel(2012) Animations 4 Jenny Adrianna 8 2 Real Steel(2012) Animations 6 Lee Pong 10 3 Alvin and the Chipmunks Animations 1 Adam Smith 1 3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2 3 Alvin and the Chipmunks Animations 3 Susan Davidson 5 3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8 3 Alvin and the Chipmunks Animations 6 Lee Pong 10 4 The Adventures of Tin Tin Animations 1 Adam Smith 1 4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2 4 The Adventures of Tin Tin Animations 3 Susan Davidson 5 4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8 4 The Adventures of Tin Tin Animations 6 Lee Pong 10 5 Safe (2012) Action 1 Adam Smith 1 5 Safe (2012) Action 2 Ravi Kumar 2 5 Safe (2012) Action 3 Susan Davidson 5 5 Safe (2012) Action 4 Jenny Adrianna 8 5 Safe (2012) Action 6 Lee Pong 10 6 Safe House(2012) Action 1 Adam Smith 1 6 Safe House(2012) Action 2 Ravi Kumar 2 6 Safe House(2012) Action 3 Susan Davidson 5 6 Safe House(2012) Action 4 Jenny Adrianna 8 6 Safe House(2012) Action 6 Lee Pong 10 7 GIA 18+ 1 Adam Smith 1 7 GIA 18+ 2 Ravi Kumar 2 7 GIA 18+ 3 Susan Davidson 5 7 GIA 18+ 4 Jenny Adrianna 8 7 GIA 18+ 6 Lee Pong 10 8 Deadline(2009) 18+ 1 Adam Smith 1 8 Deadline(2009) 18+ 2 Ravi Kumar 2 8 Deadline(2009) 18+ 3 Susan Davidson 5 8 Deadline(2009) 18+ 4 Jenny Adrianna 8 8 Deadline(2009) 18+ 6 Lee Pong 10 9 The Dirty Picture 18+ 1 Adam Smith 1 9 The Dirty Picture 18+ 2 Ravi Kumar 2 9 The Dirty Picture 18+ 3 Susan Davidson 5 9 The Dirty Picture 18+ 4 Jenny Adrianna 8 9 The Dirty Picture 18+ 6 Lee Pong 10 10 Marley and me Romance 1 Adam Smith 1 10 Marley and me Romance 2 Ravi Kumar 2 10 Marley and me Romance 3 Susan Davidson 5 10 Marley and me Romance 4 Jenny Adrianna 8 10 Marley and me Romance 6 Lee Pong 10
UNIR INTERNAMENTE
El JOIN interno se usa para devolver filas de ambas tablas que satisfacen la condición dada.
Por ejemplo, desea obtener una lista de miembros que alquilan películas, así como títulos de películas en alquiler. Puede usar INNER JOIN para esto, que devuelve filas de ambas tablas que cumplen ciertas condiciones.
SELECT members.`first_name` , members.`last_name` , movies.`title` FROM members ,movies WHERE movies.`id` = members.`movie_id`
Ejecute el script anterior por favor
first_name last_name title Adam Smith ASSASSIN'S CREED: EMBERS Ravi Kumar Real Steel(2012) Susan Davidson Safe (2012) Jenny Adrianna Deadline(2009) Lee Pong Marley and me
Tenga en cuenta que la secuencia de comandos de resultados anterior se puede escribir de la siguiente manera para lograr los mismos resultados.
SELECT A.`first_name` , A.`last_name` , B.`title` FROM `members`AS A INNER JOIN `movies` AS B ON B.`id` = A.`movie_id`
UNIRSE externo
MySQL Outer JOINs devuelve todos los registros coincidentes de ambas tablas.
Puede detectar registros que no coinciden en la tabla adjunta. Él regresa NULO valores para registros de tabla combinados si no se encuentra ninguna coincidencia.
¿Suena confundido? Veamos un ejemplo –
ÚNETE A LA IZQUIERDA
Ahora suponga que desea obtener los títulos de cada película, así como los nombres de los miembros que las alquilan. Evidentemente, nadie alquila determinadas películas. Simplemente podemos usar ÚNETE A LA IZQUIERDA con el propósito.
LEFT JOIN devuelve todas las filas de la tabla de la izquierda incluso si no se encontraron filas coincidentes en la tabla de la derecha. Cuando no se encontraron coincidencias en la tabla de la derecha, se devuelve NULL.
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B ON B.`movie_id` = A.`id`
Cuando se ejecuta el script anterior en el banco de trabajo MySQL, puede ver que los campos de nombre de miembro que se encuentran en películas no alquiladas tienen valores NULL. Eso significa que ningún miembro que coincida encontró miembros para esa película en particular.
Note: Null is returned for non-matching rows on right
title first_name last_name ASSASSIN'S CREED: EMBERS Adam Smith Real Steel(2012) Ravi Kumar Safe (2012) Susan Davidson Deadline(2009) Jenny Adrianna Marley and me Lee Pong Alvin and the Chipmunks NULL NULL The Adventures of Tin Tin NULL NULL Safe House(2012) NULL NULL GIA NULL NULL The Dirty Picture NULL NULL
EL CORRECTO
LEIN JOIN es claramente lo contrario de LEFT JOIN. La DERECHA devuelve todas las columnas de la tabla de la derecha incluso si no se encontraron filas coincidentes en la tabla de la izquierda. Cuando no se encontraron coincidencias en la tabla de la izquierda, se devuelve NULL.
En nuestro ejemplo, supongamos que tiene que alquilarles los nombres de los miembros y las películas. Ahora tenemos un nuevo miembro que aún no ha alquilado ninguna película.
SELECT A.`first_name` , A.`last_name`, B.`title` FROM `members` AS A RIGHT JOIN `movies` AS B ON B.`id` = A.`movie_id`
La ejecución del script anterior en un banco de trabajo MySQL da los siguientes resultados.
Note: Null is returned for non-matching rows on left
first_name last_name title Adam Smith ASSASSIN'S CREED: EMBERS Ravi Kumar Real Steel(2012) Susan Davidson Safe (2012) Jenny Adrianna Deadline(2009) Lee Pong Marley and me NULL NULL Alvin and the Chipmunks NULL NULL The Adventures of Tin Tin NULL NULL Safe House(2012) NULL NULL GIA NULL NULL The Dirty Picture
Cláusulas «ON» y «USE»
En los ejemplos anteriores de una pregunta, usamos una cláusula ON para hacer coincidir los registros entre la tabla.
Se puede utilizar una cláusula USE para el mismo propósito. La diferencia con USAR un ea las columnas coincidentes deben tener nombres idénticos en ambas tablas.
En la tabla «películas» hasta ahora hemos utilizado su clave principal con el nombre «id». Hicimos referencia a esto en una tabla de «miembros» con el nombre «movie_id».
Cambiemos el nombre de las tablas de «película» al campo «id» llamado «movie_id». Hacemos esto para que tengamos nombres de campo coincidentes idénticos.
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
Entonces usemos el ejemplo LEFT JOIN anterior.
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B USING ( `movie_id` )
En lugar de usar Arkansas y UTILIZAR con JOINs puede utilizar muchas otras cláusulas de MySQL como GRUPO EN, LUGAR e incluso funciona como SUMA, AVGetc.
¿Por qué deberíamos usar porros?
Ahora puede que te preguntes por qué usamos JOINs cuando podemos hacer la misma tarea ejecutando preguntas. Especialmente si tienes algo de experiencia en programación de bases de datos sabes que podemos ejecutar consultas una a una, usa la salida de cada una de ellas en consultas sucesivas. Por supuesto, eso es posible. Usando JOINs, puede hacer el trabajo usando una sola consulta con cualquier parámetro de búsqueda. Por otro lado MySQL puede lograr un mejor rendimiento con JOIN, ya que puede usar Indexing. Solo es necesario reducir los gastos generales del servidor si se utiliza una sola consulta JOIN cuando se ejecutan varias consultas. El uso de múltiples consultas en su lugar conduce a más transferencias de datos entre MySQL y aplicaciones (software). Además, también requiere más manipulaciones de datos al final de la aplicación.
Claramente podemos lograr mejores demostraciones de aplicaciones y MySQL usando JOINs.
Resumen
- JOINS nos permite combinar datos de más de una tabla en un solo conjunto de resultados.
- JOINS tiene un mejor rendimiento en comparación con las subpreguntas
- INNER JOINS solo devuelve filas que cumplen los criterios dados.
- OUTER JOINS también puede devolver filas cuando no se encontraron coincidencias. Las filas no coincidentes se devuelven con la palabra clave NULL.
- Los principales tipos de JOIN incluyen Inner, Outer Left, Outer Right, Cross JOINS, etc.
- «ON» es la cláusula que se utiliza a menudo en las operaciones JOIN. Una cláusula «USE» requiere que las columnas coincidentes tengan el mismo nombre.
- JOINS también se puede utilizar en otras cláusulas como GROUP BY, WHERE, SUB QUERIES, AGREE FUNCTIONS, etc.