Mysql
 sql >> Base de données >  >> RDS >> Mysql

Dans les requêtes MySQL, pourquoi utiliser join au lieu de where ?

Toute requête impliquant plusieurs tables nécessite une certaine forme d'association pour lier les résultats de la table "A" à la table "B". Le moyen traditionnel (ANSI-89) de le faire est de :

  1. Répertorier les tables impliquées dans une liste séparée par des virgules dans la clause FROM
  2. Ecrire l'association entre les tables dans la clause WHERE

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

Voici la requête réécrite à l'aide de la syntaxe ANSI-92 JOIN :

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

Du point de vue des performances :

Lorsqu'il est pris en charge (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), il n'y a aucun avantage en termes de performances à utiliser l'une ou l'autre syntaxe par rapport à l'autre. L'optimiseur les considère comme la même requête. Mais les requêtes plus complexes peuvent bénéficier de l'utilisation de la syntaxe ANSI-92 :

  • Capacité à contrôler l'ordre JOIN - l'ordre dans lequel les tables sont analysées
  • Possibilité d'appliquer des critères de filtrage sur une table avant de rejoindre

Du point de vue de la maintenance :

Il existe de nombreuses raisons d'utiliser la syntaxe ANSI-92 JOIN plutôt que ANSI-89 :

  • Plus lisible, car le critère JOIN est distinct de la clause WHERE
  • Moins susceptibles de manquer les critères JOIN
  • Prise en charge cohérente de la syntaxe pour les types JOIN autres que INNER, ce qui facilite l'utilisation des requêtes sur d'autres bases de données
  • La clause WHERE sert uniquement de filtrage du produit cartésien des tables jointes

Du point de vue de la conception :

La syntaxe ANSI-92 JOIN est un modèle, pas un anti-modèle :

  • Le but de la requête est plus évident ; les colonnes utilisées par l'application sont claires
  • Il suit la règle de modularité concernant l'utilisation d'un typage strict chaque fois que possible. Explicit est presque universellement meilleur.

Conclusion

À court de familiarité et/ou de confort, je ne vois aucun avantage à continuer à utiliser la clause ANSI-89 WHERE au lieu de la syntaxe ANSI-92 JOIN. Certains pourraient se plaindre que la syntaxe ANSI-92 est plus détaillée, mais c'est ce qui la rend explicite. Plus c'est explicite, plus c'est facile à comprendre et à maintenir.