Pregunta

¿Hay alguna diferencia significativa entre el siguiente?

SELECT a.name, b.name FROM a, b WHERE a.id = b.id AND a.id = 1

y

SELECT a.name, b.name FROM a INNER JOIN b ON a.id = b.id WHERE a.id = 1

hacerlo los usuarios tienen una preferencia de uno sobre el otro?

¿Fue útil?

Solución

No hay diferencia, pero la legibilidad de la segunda es mucho mejor cuando se tiene un gran multi-consulta de combinación con adicional donde cláusulas para el filtrado.
La separación de las cláusulas y las cláusulas de filtro de combinación es una buena cosa:)

Otros consejos

El primero es ANSI 89 sintaxis, el último es ANSI 92.

que consulta específica no hay ninguna diferencia. Sin embargo, con el primero se pierde la capacidad de separar un filtro de una condición de unión en consultas complejas, y la sintaxis para especificar IZQUIERDA DERECHA vs vs interior es a menudo confuso, especialmente si usted tiene que ir y venir entre diferentes proveedores db. No me gusta la sintaxis más antigua en absoluto.

No hay ninguna diferencia con el motor de consulta SQL.

Para facilitar la lectura, este último es mucho más fácil de leer si utiliza saltos de línea y sangría.

Para combinaciones internas, no importa si se pone "filtros" y "une" en ON o cláusula WHERE, el optimizador de consultas debe decidir qué hacer primero de todos modos (que puede optar por hacer un primer filtro, una unión más adelante , o viceversa

Para combinaciones externas sin embargo, hay una diferencia, y, a veces usted querrá poner la condición de la cláusula ON, a veces en el WHERE. Poniendo una condición en la cláusula WHERE de una combinación externa puede convertirlo en un INNER JOIN (debido a cómo funcionan los nulos)

Por ejemplo, comprobar la legibilidad entre las dos muestras siguientes:

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

vs

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c 
INNER JOIN order o
   ON  o.customer_id = c.customer_id
   AND o.orderdate >= '2003-01-01'
   AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
   ON  r.order_id = o.order_id
INNER JOIN article a 
   ON  a.article_id = r.article_id
WHERE  c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

Mientras que usted puede realizar la mayoría de tareas por medio de ambos y en su caso no hay ninguna diferencia en absoluto, que se utilice siempre el segundo en todo momento.

  1. Es el estándar actual apoyado
  2. Se mantiene une en la cláusula y filtros en la cláusula WHERE DE
  3. Se hace más compleja IZQUIERDA, DERECHA, FULL OUTER une mucho más fácil
  4. Ayuda MSSQL todo se basa en torno a que la sintaxis, por lo tanto mucho más fácil conseguir ayuda en sus consultas de problemas

Si bien no hay ninguna diferencia técnicamente, es necesario tener mucho cuidado en hacer une con el primer método. Si uno se equivoca por accidente, que podría terminar haciendo un cartesiano unión entre el A y tablas B (A muy largo, la memoria y la CPU consulta intensiva - que coincidirá con cada fila individual en una con todas las filas de b malo si a. y b son grandes mesas para empezar). El uso de un INNER JOIN explícita es más seguro y más fácil de leer.

No hay diferencia. Me parece que el primer formato más fácil de leer y utilizar el segundo formato sólo cuando haciendo otros tipos de uniones (EXTERIOR, interior izquierda, etc.).

La segunda forma es la sintaxis compatible con SQL92. Esto debe significar que es apoyado por todos los proveedores actuales y futuras bases de datos. Sin embargo, la verdad es que la primera forma es tan penetrante que también está garantizado a estar allí por más tiempo que nos importa.

De lo contrario, son iguales en todo, en cómo tratan a bases de datos de los dos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top