Supongamos que tenemos dos tablas y deseamos unirlas ¿pero como las queremos unir? ¿por los registros conicidentes? ¿los que coinciden en tabla A? ¿los que coinciden en tabla B? ¿o algun otro?
Supongamos que tenemos las siguientes dos tablas. Tabla A está a la izquierda, y en la Tabla B está a la derecha. Vamos a poblar con cuatro registros cada una.
ID | NAME |
---|---|
Tabla 1 | |
1 | Pirate |
2 | Monkey |
3 | Ninja |
4 | Spaghetti |
ID | NAME |
---|---|
Tabla 2 | |
1 | Rutabaga |
2 | Pirate |
3 | Darth Vader |
4 | Ninja |
Unamos estas tablas por el campo de nombre de varias maneras diferentes y ver si podemos conseguir un partido conceptual a los diagramas de Venn ingeniosas.
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
ID | NAME | ID | NAME |
---|---|---|---|
INNER JOIN | |||
1 | Pirate | 2 | Pirate |
3 | Ninja | 4 | Ninja |
Inner join sólo produce el conjunto de registros que coinciden tanto en los cuadros A y B.
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
ID | NAME | ID | NAME |
---|---|---|---|
Full Outer join | |||
1 | Pirate | 2 | Pirate |
2 | Monkey | null | null |
3 | Ninja | 4 | Ninja |
4 | Spaghetti | null | null |
null | null | 1 | Rutabaga |
null | null | 3 | Darh Vader |
Full Outer join produce el conjunto de todos los registros en el cuadro A y el cuadro B, con registros coincidentes de ambos lados cuando estén disponibles. Si no hay ninguna coincidencia, el lado que falta se contiene nula.
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
ID | NAME | ID | NAME |
---|---|---|---|
LEFT OUTER JOIN | |||
1 | Pirate | 2 | Pirate |
2 | Monkey | null | null |
3 | Ninja | 4 | Ninja |
4 | Spaghetti | null | null |
Left outer join produce un conjunto completo de los registros de la Tabla A, con los registros coincidentes (donde esté disponible) de la Tabla B. Si no hay ninguna coincidencia, el lado derecho contendrá nulo.
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
ID | NAME | ID | NAME |
---|---|---|---|
LEFT OUTER JOIN | |||
2 | Monkey | null | null |
4 | Spaghetti | null | null |
Para producir el conjunto de registros sólo de la Tabla A, pero no en la Tabla B, se realiza la misma combinación externa izquierda, a continuación, excluir los registros que no queremos desde la derecha a través de una cláusula de dónde.
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null
ID | NAME | ID | NAME |
---|---|---|---|
FULL OUTER JOIN | |||
2 | Monkey | null | null |
4 | Spaghetti | null | null |
null | null | 1 | Rutabaga |
null | null | 3 | Darth Vader |
Para producir el conjunto de registros únicos de los cuadros A y B, que realizan la misma combinación externa completa, entonces excluir los registros que no queremos a ambos lados a través de una cláusula where.