2012-02-28 19 views
7

¿Cuál es la diferencia entre la consultaDiferencia entre SQL JOIN y consulta de dos tablas

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
FROM Persons 
INNER JOIN Orders 
ON Persons.P_Id=Orders.P_Id 
ORDER BY Persons.LastName 

y éste

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
FROM Persons, Orders 
WHERE Persons.P_Id=Orders.P_Id 
ORDER BY Persons.LastName 
+0

posible duplicado de [INNER JOIN ON vs WHERE cláusula] (http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause), [¿Cuál es la diferencia entre los dos SQL ¿unir notaciones?] (http://stackoverflow.com/questions/8251294/whats-the-difference-between-the-two-sql-join-notaciones), [¿Hay alguna diferencia al usar join y seleccionar desde multi-tables? ] (http://stackoverflow.com/questions/2592938/is-there-a-difference-using-join-andselect-from-multi-tables), etc. – onedaywhen

Respuesta

13

Hay una pequeña diferencia en la sintaxis, pero ambas consultas están haciendo una únase a los campos P_Id de las tablas respectivas.

En el segundo ejemplo, este es un implícita unen, que están limitando en su cláusula WHERE a los P_Id campos de ambas tablas.

La unión es explícita en su primer ejemplo y la cláusula de unión contiene la restricción en lugar de en una cláusula WHERE adicional.

3

Son básicamente equivalentes. En general, las palabras clave JOIN le permiten ser más explícito sobre la dirección (LEFT, RIGHT) y escribir (INNER, OUTER, CROSS) de su unión.

2

This SO posting tiene una buena explicación de las diferencias en la queja ANSI SQL, y tiene similitudes con la pregunta formulada aquí.

Mientras (como se ha indicado) ambas consultas producirán el mismo resultado, creo que siempre es una buena idea declarar explícitamente sus UNIONES. Es mucho más fácil de entender, especialmente cuando hay evaluaciones no relacionadas con JOIN en la cláusula WHERE.

Indicar explícitamente que su JOIN también le impide consultar inadvertidamente un producto cartesiano. En su segunda consulta anterior, si (por alguna razón) olvidó incluir su cláusula WHERE, su consulta se ejecutará sin condiciones de JOIN y devolverá un conjunto de resultados de cada fila en Personas emparejadas con cada fila en Pedidos ... probablemente no sea algo que usted quiere.

1

La diferencia está en sintaxis, pero no en los semántica.

El explícita JOIN sintaxis:

  • se considera más fácil de leer y
  • le permite especificar de forma limpia y en forma estándar si desea INNER, LEFT/RIGHT OUTER o una CROSS unión. Esto está en contraste con el uso de sintaxis específica de DBMS, como la sintaxis de Oracle Persons.P_Id = Orders.P_Id(+) para la combinación externa izquierda, por ejemplo.
Cuestiones relacionadas