2009-02-19 287 views
708

Tanto estas uniones me dará los mismos resultados:Diferencia entre JOIN y INNER JOIN

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK 

vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK 

¿Hay alguna diferencia entre las declaraciones en el rendimiento o de otra manera?

qué difiere entre las distintas aplicaciones de SQL?

+0

Ver esta pregunta:

+1

Como nota al margen: CROSS JOIN es una es bueno saber unirse tipo (difiere de INNER JOIN). – Serge

+5

Debe volver a abrir porque la otra pregunta señalada como equivalente no lo es. El OP pregunta si hay alguna diferencia al escribir JOIN o INNER JOIN –

Respuesta

789

Ellos son funcionalmente equivalentes, pero INNER JOIN puede ser un poco más fáciles de interpretar, sobre todo si la consulta tiene otros tipos de combinación (es decir LEFT o RIGHT o CROSS) incluidos en el mismo.

+4

¿Es esto cierto para todas las bases de datos (por ejemplo, SQL, postgres?) ¿Alguien sabe un enlace a la documentación que explica esto? – Chogg

+1

Es el estándar ANSI SQL. Ver más: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; https://en.wikipedia.org/wiki/SQL-92 – Indian

195

No, no hay ninguna diferencia, pura syntactic sugar.

+11

No llamaría a este azúcar sintáctico. Tipo de combinación "predeterminado", "taquigrafía" o "alias", tal vez. – mk12

+34

* En ciencias de la computación, el azúcar sintáctico es la sintaxis dentro de un lenguaje de programación que está diseñado para hacer que las cosas sean más fáciles de leer o expresar *. Creo que la capacidad de omitir 'INTERIOR' cae bajo esta definición. – Quassnoi

+6

Si aplica la definición muy literalmente, sí, pero siempre la he visto reservada para tipos de sintaxis más interesantes, no solo nombres alternativos para las cosas. – mk12

43

Lo mismo ocurre con la palabra OUTER JOINs"OUTER" es opcional, es el LEFT o RIGHT palabra clave que hace que el JOIN un "OUTER" JOIN.

Sin embargo, por alguna razón siempre uso "OUTER" como en LEFT OUTER JOIN y nunca LEFT JOIN, pero nunca uso INNER JOIN sino que sólo tiene que utilizar "JOIN"

SELECT ColA, ColB, ... 
FROM MyTable AS T1 
    JOIN MyOtherTable AS T2 
     ON T2.ID = T1.ID 
    LEFT OUTER JOIN MyOptionalTable AS T3 
     ON T3.ID = T1.ID 
+14

Soy lo opuesto a ti: siempre digo "INNER JOIN" pero nunca uso OUTER; así que "IZQUIERDA" y "DERECHA ÚNETE". ¡Adivina que estoy manteniendo constante mi conteo de caracteres! –

+0

¿Entonces no puede tener una unión interna izquierda o derecha? –

+3

@ Jonathan. No hay concepto de dirección en una unión interna. Las uniones externas pueden producir conjuntos de resultados sin igual y pueden variar según la dirección. El interior requiere que coincida para que la dirección no importe. –

108

INNER JOIN = JOIN:

INNER JOIN es el por defecto si no se especifica el tipo cuando se utiliza la palabra JOIN.

También puede usar LEFT OUTER JOIN o RIGHT OUTER JOIN, en cuyo caso la palabra OUTER es opcional, o puede especificar CROSS JOIN.

O

Para una combinación interna, la sintaxis es:

SELECT ...
DE TableA
[INTERIOR] JOIN TableB

(en otras palabras, la palabra clave "interior" es opcionales - resultados son los mismos con o sin ella)

37

¿Difiere entre las diferentes implementaciones de SQL?

Sí, MS Access no permite simplemente join Requiere inner join.

591

Simplemente tecleando JOIN realiza una INNER JOIN por defecto.

Para todos los demás, una imagen a veces vale más de cientos de palabras: cortesía

enter image description here

Imagen de CodeProject


+296

En este caso, cientos de palabras podrían haber respondido la pregunta. Esta imagen simplemente no contiene la respuesta a la pregunta. La pregunta era por la diferencia entre JOIN e INNER JOIN y esta imagen no tiene ningún ejemplo para JOIN solo. Dicho esto, sé y me gusta mucho esta imagen, pero no es apropiada como respuesta. – konqi

+31

Vine aquí buscando lo que era un atajo para JOIN.Sé lo que hacen INNER, LEFT OUTER y RIGHT OUTER. –

+0

¿Son las imágenes correctas? encontré errores –

20

Como las otras respuestas ya afirman que no hay diferencia en tu ejemplo

El bit correspondiente de la gramática es documented here

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ] 
    JOIN 

que muestran que todos son opcionales. La página aclara más que

INNER Especifica que se devuelvan todos los pares de filas correspondientes. Descarta filas sin combinar de ambas tablas. Cuando no se especifica ningún tipo de unión, este es el predeterminado.

La gramática hace también indican que hay un momento en el que el INNER es necesario sin embargo. Al especificar una sugerencia de unión.

Véase el siguiente ejemplo

CREATE TABLE T1(X INT); 
CREATE TABLE T2(Y INT); 

SELECT * 
FROM T1 
     LOOP JOIN T2 
     ON X = Y; 

SELECT * 
FROM T1 
     INNER LOOP JOIN T2 
     ON X = Y; 

enter image description here