Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Diferença entre essas duas abordagens de tabela de junção?


Além da sintaxe, para o pequeno trecho, eles funcionam exatamente da mesma forma. Mas, se possível, sempre escreva novas consultas usando ANSI-JOINs.

Semanticamente, a notação de vírgula é usada para produzir um produto CARTESIANO entre duas tabelas, o que significa produzir uma matriz de todos os registros da tabela A com todos os registros da tabela B, então duas tabelas com 4 e 6 registros respectivamente produzem 24 registros. Usando a cláusula WHERE, você pode escolher as linhas que realmente deseja desse produto cartesiano. No entanto, o MySQL na verdade não segue e faz essa enorme matriz, mas semanticamente é isso que significa.

Uma sintaxe JOIN é o padrão ANSI que define mais claramente como as tabelas interagem. Colocando o ON cláusula ao lado do JOIN , deixa claro o que liga as duas tabelas.

Funcionalmente, eles realizarão o mesmo para suas duas consultas. A diferença vem quando você começa a usar outro [OUTER] Tipos de JOIN.

Para MySQL especificamente, a notação de vírgula tem uma diferença

STRAIGHT_JOIN é semelhante a JOIN, exceto que a tabela da esquerda é sempre lida antes da tabela da direita. Isso pode ser usado para aqueles (poucos) casos para os quais o otimizador de junção coloca as tabelas na ordem errada.

No entanto, não seria sábio apostar nessa diferença.