sql >> Base de Datos >  >> RDS >> Mysql

En las consultas de MySQL, ¿por qué usar unirse en lugar de dónde?

Cualquier consulta que involucre más de una tabla requiere alguna forma de asociación para vincular los resultados de la tabla "A" a la tabla "B". La forma tradicional (ANSI-89) de hacer esto es:

  1. Enumere las tablas involucradas en una lista separada por comas en la cláusula FROM
  2. Escriba la asociación entre las tablas en la cláusula WHERE

    SELECT *
      FROM TABLE_A a,
           TABLE_B b
     WHERE a.id = b.id
    

Aquí está la consulta reescrita usando la sintaxis ANSI-92 JOIN:

SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

Desde una perspectiva de rendimiento:

Donde sea compatible (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), no hay beneficio de rendimiento al usar una sintaxis sobre la otra. El optimizador los ve como la misma consulta. Pero las consultas más complejas pueden beneficiarse del uso de la sintaxis ANSI-92:

  • Capacidad de controlar el orden JOIN:el orden en que se escanean las tablas
  • Capacidad de aplicar criterios de filtro en una tabla antes de unirse

Desde una perspectiva de mantenimiento:

Existen numerosas razones para usar la sintaxis ANSI-92 JOIN sobre ANSI-89:

  • Más legible, ya que el criterio JOIN está separado de la cláusula WHERE
  • Es menos probable que se pierdan los criterios de JOIN
  • Soporte de sintaxis consistente para tipos JOIN que no sean INNER, lo que facilita el uso de consultas en otras bases de datos
  • La cláusula WHERE solo sirve como filtración del producto cartesiano de las tablas unidas

Desde una perspectiva de diseño:

La sintaxis de ANSI-92 JOIN es patrón, no antipatrón:

  • El propósito de la consulta es más obvio; las columnas utilizadas por la aplicación son claras
  • Sigue la regla de modularidad sobre el uso de tipos estrictos siempre que sea posible. Explícito es casi universalmente mejor.

Conclusión

A falta de familiaridad y/o comodidad, no veo ningún beneficio en continuar usando la cláusula WHERE de ANSI-89 en lugar de la sintaxis JOIN de ANSI-92. Algunos pueden quejarse de que la sintaxis de ANSI-92 es más detallada, pero eso es lo que la hace explícita. Cuanto más explícito, más fácil de entender y mantener.