2012-01-26 9 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

y¿Cuál es la diferencia entre estas tres consultas MySQL?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

y

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

Lecciones tiene una columna llamada author indexado como una clave externa a una Users.email. title es una columna en Lessons y name es una columna en Users

+0

creo que esto se trata en esta pregunta: http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

El la diferencia es meramente estilo, – onedaywhen

Respuesta

12

No hay ninguna diferencia entre los tres estados, todos ellos son, ya sea implícita o explícita, INNER JOIN s

  1. La primera afirmación es el uso de la implicit old join sintaxis. Si bien esto aún es compatible, el uso de combinaciones explícitas es más legible y mantenible. No use uniones de estilo antiguo.

  2. La segunda instrucción está utilizando una unión explícita sin especificar el tipo de unión. Por defecto, esto es un INNER JOIN

  3. La tercera instrucción es también una unión explícita y evita cualquier ambigüedad. Esta es, de lejos, la forma más recomendada de escribir uniones.

1

No solo hay idempotent perfecto, pero podría haber otra manera. Si, por ejemplo, puede cambiar el nombre de Lessons.author en Lesson.email, para asegurarse de que las columnas relacionadas tengan el mismo nombre en las dos tablas, puede usar NATURAL JOIN que vincula implícitamente filas de diferentes tablas que Compartir mismo nombre:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users; 
Cuestiones relacionadas