Archivo
Archivo
Etiquetas
Etiquetas
Entradas populares de este blog
Hacer un select readonly con jQuery
Listado de palabras en castellano
SQL Joins (intersecciones entre tablas en SQL)
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Mucho de lo que voy a hablar hoy es lo típico que se te olvida de cuando lo has estudiado, te quedas con lo más frecuente, lo más utilizado, pero SQL trae consigo multitud de herramientas, todas y cada una imprescindibles, para extraer datos con la intersección de 2 o más tablas.
No confundir este post que trata sobre los JOIN (intersecciones) con la sintaxis UNION.
Veamos de las más conocidas a las menos
Inner join
SELECT * FROM A INNER JOIN B ON A.KEY = B.KEY
Esta sencilla consulta nos devolvería los datos que están presente solamente en ambas tablas y su notación sería la siguiente AnB donde n significa intersección.
left outer join
Los que trabajamos con SQL Server y que provenimos de trabajar con MySQL esta sintaxis nos parece extraña y tal vez excluyente porque left join hace lo mismo, y es verdad, es realmente lo mismo, pero MySQL al abreviarlo nos elimina la posibilidad de saber el por qué del OUTER al no incluirlo en sus sintaxis, mientras SQL Server es más pragmático y a pesar de admitir left join cómo válido cada vez que puede el Managment Studio te lo cambia a left outer join.
Una consulta típica sería
SELECT * FROM A LEFT OUTER JOIN B ON A.KEY = B.KEY
Esta consulta nos devolvería todos los datos de la tabla A y para los que estuvieran en la tabla B los datos de esta rellenando con NULL los valores de la tabla B que no estuvieran presentes en A. La sintaxis sería Au(AnB) donde u significa UNION.
RIGHT outer join
Se aplica igual que el punto anterior pero tomando como tabla principal la tabla B (en la misma consulta de muestra).
La sintaxis sería (AnB)uB.
left excluding join
He aquí unos de los grandes desconocidos de SQL y una de las herramientas más atractivas de este lenguaje para las bases de datos. Salvo que realmente este sintaxis no existe, si queremos obtener los datos de la tabla A que no estén en la tabla B deberíamos hacer lo siguiente utilizando WHERE en la siguiente consulta:
SELECT * FROM A LEFT OUTER JOIN B ON A.KEY = B.KEY WHERE B.KEY IS NULL
La notación para esto sería A-B lo cual sería un left join que excluye los resultados del inner join o también llamado componentes relativos.
RIGHT excluding join
Lo mismo que la anterior pero con tabla principal B en la misma consulta, cambiando solo el WHERE de esta manera:
SELECT * FROM A LEFT OUTER JOIN B ON A.KEY = B.KEY WHERE A.KEY IS NULL
La notación sería en este caso B-A
OUTER JOIn | full outer join | full join
SELECT * FROM A FULL OUTER JOIN B ON A.KEY = B.KEY
La consulta anterior nos devolvería todos los resultados tanto de una tabla como de la otra así como su intersección.
La sintaxis sería AuBu(AnB)
outer excluding join
Si quisiéramos todos los datos de A y de B menos los que coincidan tendríamos que hacer lo siguiente:
SELECT * FROM A FULL OUTER JOIN B ON A.KEY = B.KEY WHERE A.KEY IS NULL OR B.KEY IS NULL
La sintaxis es (A-B)u(B-A)
De esta forma hemos hecho un repaso de las distintas posibilidades de intersección entre tablas en SQL.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios