JOIN en MySQL
Sentencias JOIN en MySQL
Las funciones JOIN son cláusulas que permiten obtener datos de dos o más tablas relacionales al mismo tiempo mediante los comandos SELECT, DELETE, UPDATE. E
INNER JOIN
Retorna los registros de las tablas que coinciden:
SELECT [campo] FROM [tabla1]
INNER JOIN [tabla2]
ON tabla1.campo = tabla2.campo
SELECT nombre, perfil.nombre AS perfilNombre,
noticias.detalle AS detalle
FROM usuarios
INNER JOIN perfil, noticias
ON usuarios.id=noticias.user_id
SELECT nombre, perfil.nombre AS perfilNombre,
noticias.detalle AS detalle
FROM usuarios
INNER JOIN perfil, noticias
WHERE usuarios.id=noticias.user_id
AND perfil.user_id=usuarios.id
LEFT JOIN
Retorna los registros la tabla1(junto al FROM) y los que coinciden con la tabla2,tabla3,etc...
SELECT [campo] FROM [tabla1]
LEFT JOIN tabla2
ON tabla1.campo = tabla2.campo
SELECT u.nombre,p.edad,p.apellidos
FROM usuarios AS u
LEFT JOIN perfil AS p
ON u.id=p.user_id
RIGHT JOIN
Retorna los registros de la tabla2 y los que coinciden con la tabla1(junto al FROM). Si en algún campo no coincide ese campo se convierte a NULL.
SELECT nombre, p.edad AS edad
FROM usuarios
RIGHT JOIN perfil
ON usuarios.id = perfil.user_id
Nota: Si añadimos otra condición(AND) debemos sustituir ON por WHERE
UNION
Retorna la combinación de dos o más SELECT. Todos los SELECT deben tener el mismo número de campos, del mismo tipo y en el mismo orden.
SELECT nombre, edad
FROM usuarios
WHERE nombre = "Juan"
UNION
SELECT nombre,edad
FROM usuarios
WHERE nombre = "Manolo"
FULL OUTER JOIN (Cláusula no disponible en MySQL)
Retorna todos los registros de tabla1 y tabla2
SELECT * FROM [tabla1]
LEFT JOIN [tabla2] ON [tabla1.campo]=[tabla2.campo]
UNION
SELECT * FROM [tabla1]
RIGHT JOIN [tabla2] ON [tabla1.campo] = [tabla2.campo]
A continuación un ejemplo básico más práctico con dos tablas para entender mejor la diferencia.
Tabla usuarios
ID nombre
-------------------
1 Juan
2 Javier
3 Rubén
4 Iván
Tabla destinatarios
ID nombre
-------------------
1 Rubén
2 Iván
3 Mónica
4 Vanesa
SELECT * FROM usuarios
INNER JOIN destinatarios
ON usuarios.nombre = destinatarios.nombre;
usuarios destinatarios
(campo nombre) (campo nombre)
-----------------------------------------
Rubén Rubén
Iván Iván
SELECT * FROM usuarios
LEFT JOIN destinatarios
ON usuarios.nombre = destinatarios.nombre
usuarios destinatarios
(campo nombre) (campo nombre)
--------------------------------
Juan null
Javier null
Rubén Rubén
Iván Iván
SELECT * FROM usuarios
RIGHT JOIN destinatarios
ON usuarios.nombre = destinatarios.nombre;
usuarios destinatarios
(campo nombre) (campo nombre)
-------------------------------
Rubén Rubén
Iván Iván
null Mónica
Javier Vanesa
Para poder comentar es necesario iniciar sesión