Explicacion de JOIN , INNER JOIN LEFT RIGHT JOIN MySQL y otras bases de datos

 Explicacion de JOIN , INNER JOIN LEFT RIGHT JOIN  MySQL


"JOIN" es una palabra clave de SQL se utiliza para consultar los datos de dos o más tablas relacionadas. Por desgracia, regularmente en el concepto se da el uso de términos abstractos. A menudo me confunde... Y a muchos otros tambien, así que este es mi intento de explicar JOINs .


tablas relacionadas


MySQL, PostgreSQL, Firebird, SQLite, SQL Server y Oracle son los sistemas de bases de datos relacionales. Una base de datos bien diseñada proporcionará un número de tablas que contienen datos relacionados. Un ejemplo muy simple sería los usuarios (alumnos) y las inscripciones del curso:

'User' tabla:


idnamecourse
1Alice1
2Bob1
3Caroline2
4David5
5Emma(NULL)

MySQL DDL CODIGO:
CREATE TABLE `user` (
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL,
 `course` smallint(5) unsigned DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;
j

Cursos que podran tomar los alumnos…

‘course’ table:
idname
1HTML5
2CSS3
3JavaScript
4PHP
5MySQL
MySQL table creation code:
CREATE TABLE `course` (
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;


 Puesto que estamos utilizando tablas InnoDB y saber que user.course y course.id se relacionan, se puede especificar una relación de clave foranea.


ALTER TABLE `user`
ADD CONSTRAINT `FK_course`
FOREIGN KEY (`course`) REFERENCES `course` (`id`)
ON UPDATE CASCADE;

 En esencia, MySQL automáticamente:

  • renumera las entradas s asociadas en la columna user.course si hay cambios en course.id
  • Rechaza cualquier intento de eliminar un curso donde los usuarios están inscritos.
importante: este es el diseño de base de datos terrible!

Esta base de datos no es eficiente. Está bien para este ejemplo, que un estudiante sólo puede estar inscrito en un curso o cero. Un verdadero sistema tendría que superar esta restricción - probablemente con la matriculación de  tabla
intermediaria que asigna un número de estudiantes a cualquier número de cursos.

Los JOINs nos permiten consultar estos datos en un número de maneras.


 INNER JOIN

El más utilizado es INNER JOIN. Esto produce un conjunto de registros que coincidan en el usuario y el curso de las tablas, es decir, todos los usuarios que están inscritos en un curso:

SELECT user.name, course.name
FROM `
user`
INNER JOIN `` en curso user.course = course.id;

Resultado:
user.name course.name
Alice HTML5
Bob HTML5
Carline CSS3
David MySQL


LEFT JOIN


¿Qué pasa si se requiere una lista de todos los estudiantes y sus cursos, incluso si no está inscrito en uno? Un LEFT JOIN produce un conjunto de registros que coincidan con cada entrada de la tabla de la izquierda (el usuario), independientemente de cualquier entrada coincidente en la tabla de la derecha (por supuesto):

SELECT user.name, course.name
FROM `users`
LEFT JOIN `` en curso user.course = course.id;

Resultado:
user.name course.name
Alice HTML5
Bob HTML5
Carline CSS3
David MySQL
Emma (NULL)


RIGHT JOIN


Tal vez necesitamos una lista de todos los cursos y los estudiantes, aunque nadie se ha inscrito? A RIGHT JOIN produce un conjunto de registros que coinciden con cada entrada de la tabla de la derecha (por supuesto), independientemente de cualquier registro coincidente en la tabla de la izquierda (usuario):


SELECT user.name, course.name
FROM `users`
RIGHT JOIN `` en curso user.course = course.id;

Resultado:
user.name course.name
Alice HTML5
Bob HTML5
Carline CSS3
(NULL) JavaScript
(NULL) PHP
David MySQL

RIGHT JOIN se usa muy poco ya que se puede expresar el mismo resultado utilizando un LEFT JOIN. Esto puede ser más eficaz y más rápido para la base de datos para analizar:

SELECT user.name, course.name
`FROM`
curse
LEFT JOIN `user` on user.course = course.id;

Podríamos, por ejemplo, contar el número de alumnos matriculados en cada curso:

Course.name SELECT, COUNT (user.name)
`FROM` curse
LEFT JOIN `user` ON = user.course course.id
GROUP BY course.id;

Resultado:
Número de course.name ()
HTML5 2
CSS3 1
JavaScript 0
PHP 0

MySQL 1




Espero que le da una mejor comprensión de los joins y le ayuda a escribir consultas SQL más eficientes.

gracias,
James Jara

0 pensamientos:

Post a Comment

feedback!