JOINS en SQL
Publicado el 12 de septiembre de 2007Hoy en clase estamos dando “JOINS”. Aprovecho para postear sobre el tema.
De Wikipedia:
La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.
En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.
Matematicamente, JOIN es composición relacional, la operacion fundamental en el álgebra relacional,y generalizando es una funcion de composicion.
Es una forma de recuperar datos mediante un SELECT uniendo dos o más tablas.
Cuando entré a mi trabajo actual, mi experiencia con SQL era totalmente nula. Sin embargo, tenía que empezar a usar funciones complicadas, vistas, procedimientos almacenados, y selects que en el momento me parecían imposibles.
Una de las cosas más importantes que aprendí fue a hacer los JOINS. Y de esos tiempos me acuerdo del siguiente artículo: JOINS para seres humanos. Ahí están los diagramas de conjuntos para cada tipo de Join y es recomendable leer el post para ver algo más.
En mi caso voy a escribir algo netamente práctico para tratar de sacarle la vuelta. Una vez que se entiende, resulta muy práctico, y se usa mucho. Personalmente el que más uso es el INNER JOIN pero dependiendo de la situación, hay que analizar cuál JOIN viene mejor. Recomiendo visitar la página de WikiPedia que está bastante concreta, y después armarse una base de datos y empezar a probarlo.
EJEMPLO: Tenemos una base de datos con una tabla “Estudiantes”, que guarda el Id y Nombre, “Materias” que guarda lo mismo, y una que relaciona las dos mediantes sus respectivos ID:
INNER JOIN: Queremos un SELECT que nos devuelva los nombres de cada estudiante que está estudiando una materia, y qué materias está estudiando.
SELECT E.Nombre, M.Nombre FROM Estudiantes AS E INNER JOIN Estudiantes_Materias AS EM ON EM.IdEstudiante = E.Id INNER JOIN Materias AS M ON M.Id = EM.IdMateria ORDER BY E.Nombre |
Es importante notar que Transact SQL (la versión de SQL que usa MS SQL SERVER) tiene la posibilidad de hacer este tipo de consultas de forma más “sencilla” a simple vista con algo como:
SELECT E.Nombre, M.Nombre FROM Estudiantes AS E, Materias AS M, Estudiantes_Materias AS EM WHERE E.Id = EM.IdEstudiante AND M.Id = EM.IdMateria |
Sin embargo, es más recomendable hacerlo a la manera “ANSI” que es la más estándar, así si cambiáramos de motor de base de datos a Oracle, Postgre o MySQL tendríamos menos dificultad con la sintaxis.
OUTER JOIN: Ahora queremos saber lo mismo, pero además mostrar los estudiantes que no están estudiando ninguna materia:
SELECT E.Nombre, EM.IdMateria FROM Estudiantes_Materias AS EM FULL OUTER JOIN Estudiantes AS E ON E.Id = EM.IdEstudiante |
Con eso ya se puede tener una idea de qué significan los joins. Por experiencia puedo decir que se llega a entender bien sólo con la práctica.
Por más información:
- Join – Wikipedia
- QuarkBlog – Joins para seres humanos.
4 comentarios en este post
Feed de comentarios-
Fernando (fbt) 's status on Friday, 24-Jul-09 17:02:57 UTC - Identi.ca |
24 julio. 2009 - 15:03
[…] SELECT … INNER JOIN … ON … Joins en SQL: https://picandocodigo.net/2007/joins-en-sql/ […]
-
Brutalidades en el léxico de los informáticos | Picando Código |
14 octubre. 2009 - 05:01
[…] Joinear – Siguiendo con bases de datos, cuando utilizamos joins entre tablas. […]
salem 14 septiembre. 2007 - 02:27
juro que lei JSON en SQL =P.
que ria uno sin los JOIN’s … pecimas aplicaciones.
fernando 19 septiembre. 2007 - 15:20
JSON por JavaScript Object Notation??
No, ni cerca ando de eso… jejeje.
Los JOINS son tan esenciales como el café de media tarde.