2012-07-30 18 views
47

Simplemente jugando con consultas y ejemplos para obtener una mejor comprensión de las uniones. Estoy notando que en SQL Server 2008, las siguientes dos consultas dan los mismos resultados:FULL OUTER JOIN vs. FULL JOIN

SELECT * FROM TableA 
FULL OUTER JOIN TableB 
ON TableA.name = TableB.name 

SELECT * FROM TableA 
FULL JOIN TableB 
ON TableA.name = TableB.name 

Son éstos realizar exactamente la misma acción para producir los mismos resultados, o iba a ejecutar en resultados diferentes en un ejemplo más complicado? ¿Es solo terminología intercambiable?

+0

Sí, ambas consultas me dan los mismos resultados en SQL Server 2008 R2. – CptSupermrkt

Respuesta

56

Actualmente son iguales. LEFT OUTER JOIN es igual que LEFT JOIN y RIGHT OUTER JOIN es igual que RIGHT JOIN. Es una forma más informativa de comparar desde INNER Join.

Consulte este Wikipedia article para más detalles.

+2

Perfecto, gracias.Tantos tutoriales que he encontrado los utilizan de acuerdo con su propio estilo, sin hacer notar que son lo mismo. – CptSupermrkt

+1

Creo que deberías corregir esto. Casi todos los DBMS entienden la palabra clave 'OUTER'. Al menos Postgres, Oracle, MySQL, SQLite, DB2, incluso Access. En realidad, no conozco ningún DBMS que no lo acepte. –

+1

representación visual de combinaciones: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins –

20

Microsoft® SQL Server ™ 2000 utiliza estas SQL-92 palabras clave para combinaciones externas especifican en una cláusula FROM:

  • LEFT OUTER JOIN o LEFT JOIN

  • RIGHT OUTER JOIN o RIGHT JOIN

  • combinación externa completa o FULL JOIN

De MSDN

Los full outer join o full join devuelve todas las filas de ambas tablas, haciendo coincidir las filas siempre que sea un partido se pueden hacer y colocar NULL s en los lugares donde no existe una fila coincidente.

5

Es cierto que algunas bases de datos reconocen la palabra clave OUTER. Algunos no. Donde se reconoce, por lo general es palabra clave opcional. Casi siempre, FULL JOIN y FULL OUTER JOIN hacen exactamente lo mismo. (No puedo pensar en un ejemplo en el que no lo hacen. ¿Alguien más puede pensar en uno?)

Esto puede dejarte preguntándote, "¿Por qué sería incluso una palabra clave si no tiene ningún significado?" La respuesta se reduce al estilo de programación.

En los viejos tiempos, los programadores se esforzaron por hacer su código lo más compacto posible. Cada personaje significaba un tiempo de procesamiento más largo. Usamos variables de 1, 2 y 3 letras. Usamos años de 2 dígitos. Eliminamos todo el espacio en blanco innecesario. Algunas personas todavía programan de esa manera. Ya no se trata de procesar el tiempo. Se trata más de una codificación rápida.

Los programadores modernos están aprendiendo a usar variables más descriptivas y poner más comentarios y documentación en sus códigos. Al usar palabras adicionales como OUTER, asegúrese de que otras personas que leen el código tengan más facilidad para entenderlo. Habrá menos ambigüedad. Este estilo es mucho más legible y más amable para las personas en el futuro que tendrán que mantener ese código.