# data[].attributes.body
Select a.apellido, b.logros

From personas A

right join logros B

On a.personalid = b.personalid

Where a.personalid is null

Resultado

NULL       Cura del Cancer

# data[].attributes.body
Diferencia entre JOIN y UNION en SQL

# data[].attributes.body
Select a.apellido, b.logros

From personas A

Left join logros B

On a.personalid = b.personalid

Where b.personalid is null

Resultado

Fernandez              NULL

# data[].attributes.body
Select p.persona_id, t.actividad
From   personas p,
left join tarea t
on p.persona_id = t.persona_id
Where t.actividad is null

# data[].attributes.body
como adicionales, right y left join excluyendo la intersección

cross join realiza el producto cartesiano de ambas tablas (no recomendada)

# data[].attributes.body
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;

# data[].attributes.body
- Cross Join
- Left Join With exclusions (Clave tabla 2 is null)
- Right Join With exclusions (Clave tabla 1 is null)
-Full Outer Join with exclusions

# data[].attributes.body
Un selft join una combinación en la que una tabla se une o relaciona consigo misma (lo que también se llama relaciones unarias), especialmente cuando la tabla tiene una LLAVE EXTRANJERA que hace referencia a su propia LLAVE PRIMARIA. Unir una tabla en sí significa que cada fila de la tabla se combina consigo misma y con cada otra fila de la tabla.
SELECT e.Nombre_Emp as Empleado,m.Nombre_Emp as Jefe

FROM Empleado as e JOIN Empleado as m

ON e.Superv_Emp=m.No_Emp order by m.Nombre_Emp

# data[].attributes.body
Otros tipos de joins ademas de Inner, Left, Right y Outer, son CROSS JOIN, O SELF JOIN, pero no todos ellos están soportados por todos los sistemas de bases de datos.

# data[].attributes.headline
Hernan-CROSS JOIN:Para finalizar existe el CROSS JOIN, el cual no puede ser explicado con un diagrama de Venn. Lo que hace, es unir todo con todo, es decir realiza el producto cartesiano. Como tenemos 12 productos y 8 categorías (12 x 8 = 96), obtendremos 96 registros en el resultado final. Este tipo de JOIN puede resultar pesado en el nivel de rendimiento de la base de datos, mucho aun si lo aplicamos a tablas con demasiada data. Una de las principales características es que no tiene una relación entre sí (en nuestro caso se descarta los campos PR.COD_CATEGORIA = CA.COD_CATEGORIA).

# data[].attributes.subject
Hernan-CROSS JOIN:Para finalizar existe el CROSS JOIN, el cual no puede ser explicado con un diagrama de Venn. Lo que hace, es unir todo con todo, es decir realiza el producto cartesiano. Como tenemos 12 productos y 8 categorías (12 x 8 = 96), obtendremos 96 registros en el resultado final. Este tipo de JOIN puede resultar pesado en el nivel de rendimiento de la base de datos, mucho aun si lo aplicamos a tablas con demasiada data. Una de las principales características es que no tiene una relación entre sí (en nuestro caso se descarta los campos PR.COD_CATEGORIA = CA.COD_CATEGORIA).

# data[].attributes.attachment_link.readable_text
El lenguaje SQL sigue siendo la "lingua franca" para acceder a todo tipo de datos. Hasta las bases de datos NoSQL acaban siempre ofreciendo algún tipo de interfaz SQL (o como mínimo "SQL-like") a sus datos semiestructurados para intentar llegar a una audiencia más amplia. De hecho hasta herramientas que ofrecen una visión unificada sobre un conjunto de bases de datos diversos (ej. Apache Drill) o herramientas dedicadas al streaming data van a lo seguro y ofrecen una interfaz SQL "apta para todos los públicos".

Toda base de datos #NoSQL evoluciona hasta que es capaz de ejecutar consultas #SQL. Las que no lo consiguen son reemplazadas por otras que sí pueden. Click To Tweet

Es por eso que sigue siendo vital para cualquier informático (en su sentido más amplio) aprender SQL. Ya os presentamos una web para aprender SQL online (creada por Oracle mismo). Hoy os traemos un clásico que vale la pena guardar en vuestro historial: la guía de referencia rápida para todos los tipos de joins en SQL. La instrucción de Join, como su nombre indica, se usa para enlazar los datos de dos tablas relacionadas a través de algún campo en común (típicamente una "foreign key" o clave foránea) y así dar como resultado filas que mezclan datos provenientes de las dos (o más) tablas sobre las que hemos hecho el Join.

El Join es sin duda una de las operaciones más importantes en SQL pero también una de las más difíciles de entender. Para ilustrar los diferentes tipos de Join, la imagen que encabeza este post ofrece un resumen (utilizando teoría de conjuntos) de como se comporta cada Join. Pasemos a explicar con un poco más de detalle cada uno de ellos:

Inner Join. El Join de "toda la vida". El join per defecto que se aplica cuando no indicamos otra cosa al hacer la consulta. Devuelve sólo aquellas filas donde haya un "match", es decir, las filas donde el valor del campo de la tabla A que se utiliza para hacer el Join coincida con el valor del campo correspondiente en la tabla B. Ejemplo: devolver todos los productos para los que haya como mínimo un pedido en los últimos días (el inner join enlazará el campo producto en la tabla Pedido con la clave primaria de ese producto en la tabla Producto).

Left outer Join. Cuando quieres todas las filas para las que haya match pero también aquellas de la Tabla A que no hagan match. Siguiendo el ejemplo anterior, si quieres listar todos los productos con datos de sus pedidos pero mostrando también aquellos productos para lo que no tengas todavía un pedido, la solución sería hacer una Left Outer join entre Producto y Pedido.

Right outer Join. Exactamente lo mismo pero a la inversa, cuando quieres listar las filas de la tabla B aunque no estén relacionadas con ninguna fila de la tabla A. Es un operador un poco redundante ya que se podría cambiar simplemente el orden de las tablas en el Join y utilizar un left outer para conseguir el mismo efecto. No obstante, y como parte de Joins múltiples, es útil tener los dos para un mejor comprensión de la consulta

Full outer join. Es como la suma de las dos anteriores. Queremos tanto las filas de la A como las de B, tanto si hay match como si no (evidentemente cuando haya match la consulta devolverá todos los campos de A y B que hayamos indicado, cuando no, la consulta devolverá sólo los campos de A o B).

El lector avispado se habrá dado cuenta de qué en la lista anterior faltan tres casos. Para mí, más que tipos diferentes de Join "primitivos" son ya combinaciones de operadores que se pueden expresar con joins o con otras concatenaciones de operadores SQL. Por ejemplo, el Left Join con B.key is null, yo lo hubiera escrito usando el operador NOT IN, diciendo que quiero devolver todas las filas de A que NO se referencian en la tabla B. Me parece una manera más natural de expresarlo que como se indica en el gráfico (aunque como siempre, sobre gustos no hay nada escrito).

Y si con la teoría de conjuntos todavía no conseguís recordar, a lo mejor esta imagen (vista aquí) se quedará más grabada en vuestra memoria:

Y si quieres profundizar más tu conocimiento de SQL puedes llevar a la práctica estos diferentes tipos de joins jugando a resolver este crimen utilizando SQL.

Para aprender más sobre otros elementos de la sintaxis SQL, creo que esta otra referencia rápida de la sintaxis SQL os será muy útil también: .

# data[].attributes.attachment_link.title
Todos los tipos de JOIN en SQL - Guía de referencia rápida

# data[].attributes.attachment_link.description
Os explicamos la mejor guía de referencia rápida para entender como funciona la instrucción Join de SQL. Una instrucción básica para poder trabajar con todo tipo de datos (no sólo relacionales). Aprende de una vez qué es un left outer join, un full outer join,...

# data[].attributes.body
Aunque o sea muy usado el outer Join, la última sentencia es una forma hacerlo usando left join y rigth join y unión.

Tambien encontre Left y rigth Excluding JOIN.