2011-10-18 20 views
5

He estado buscando a lo largo y ancho, pero no puedo encontrar una respuesta, probablemente porque no puedo encontrar la manera correcta de hacer la pregunta. Entonces aquí está: ¿hay alguna razón para preferir alguna de estas dos consultas?UNIDAS vs SELECCIONAR de muchas tablas

SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

y

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

La pregunta surge de una consulta mucho más complicado que estoy tratando de optimizar, pero creo que esas dos consultas contienen la esencia de la cuestión, y es de esperar preguntando en este forma en que será más útil para otros. Gracias por adelantado.

+0

¿Esa primera consulta incluso funciona?Si es así, supongo que está haciendo silenciosamente alguna forma de unión, pero no sé de qué tipo. – eykanal

+0

Funciona, lo probé antes de publicarlo. ;) – Sophivorus

Respuesta

4
SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

y

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

obtendrá los mismos resultados. Sin embargo, debería preferir el segundo en este caso. La primera forma todavía se encuentra ampliamente porque Oracle no admitió la segunda forma durante mucho tiempo.

embargo, indicando INNER JOIN lleva la intención y te obliga a escribir una condición debido a que un INNER JOIN requiere una cláusula de ON. Para consultas más grandes, hace que la consulta sea mucho más legible y hace que sea más difícil omitir un predicado de unión.

Además, tenga en cuenta que yo tendería a leer la primera forma como: tomar el producto cartesiano de las dos tablas, y sólo conservar las filas que tienen ID iguales en ambas tablas, que en SQL se expresa como SELECT * FROM table1 CROSS JOIN table2 WHERE table1.id = table2.id;.

5

En realidad, las dos consultas son las mismas, solo dos formas diferentes de escribirlo. Personalmente, creo que este último da un poco más de legibilidad para el usuario.

+0

Sin mencionar que creo que el primero está [en desuso] (http://blogs.technet.com/b/wardpond/archive/2008/09/13/deprecation-of-old-style-join-syntax- only-a-partial-thing.aspx). –

2

De what I gather son las mismas. Uno es solo azúcar sintáctico para el otro.

Se conoce como notación explícita frente a unión implícita.

+0

+1 para las palabras "explícito" frente a "implícito". – Benoit

2

Son lo mismo.

Gran parte de las diferencias observadas en el formato básico a menudo se da entre diferentes bases de datos, como Oracle y mySQL. Tradicionalmente en el oráculo ensambla fue hecho usando sólo table.foreign_id = table2.id mientras que MySQL estaría utilizando table1 join table2 on table1.foreign_key = table2.id

Del mismo modo join, inner join, left inner join y left join han variado tradicionalmente un poco de la aplicación de base de datos de aplicación así que lo mejor es comprobar el manual/documento para su implementación actual de la base de datos para asegurarse de que está haciendo lo que desea.

En tiempos más recientes, la sintaxis se ha estandarizado con los estándares ANSI, pero lo que la gente usa a menudo muestra sus raíces.
Este artículo bien escrito -
http://www.google.com/url?sa=t&source=web&cd=4&ved=0CD8QFjAD&url=http%3A%2F%2Fwww.kingtraining.com%2Fconfdownloads%2Fdownloads%2FOracle9iJoin_paper.pdf&ei=LOGdTpfiFOrV0QH4zpmECQ&usg=AFQjCNHjicW-tWmJfZcXwNi220LxjGvNhg&sig2=4tdM2lfgQ6AqiYudWWTirg

da mucha más información y de la historia y explica los diversos tipos de interior y exterior se une muy bien.

Cuestiones relacionadas