Il semble que de combiner deux ou plusieurs tables, nous pouvons soit utiliser join ou où. Quels sont les avantages de l’un sur l’autre ?
Réponses
Trop de publicités?Toute requête portant sur plus d'une table nécessite une certaine forme d'association de lier les résultats du tableau "A" à la table "B". Le traditionnel (ANSI-89) les moyens de le faire, c'est:
- Liste des les tables impliquées dans une liste séparée par des virgules dans la clause from
-
Écrire 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 norme ANSI-92 syntaxe de JOINTURE:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
À partir d'un point de vue des Performances:
Où la prise en charge (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), il n'y a pas d'avantage en termes de performances à l'aide de la syntaxe sur l'autre. L'optimiseur voit que la même requête. Mais des requêtes plus complexes peuvent bénéficier de l'utilisation ANSI-92 syntaxe:
- La capacité de contrôle de REJOINDRE l'ordre - l'ordre les tables sont numérisés
- Capacité à appliquer des critères de filtre sur une table avant de se joindre à
À partir d'un point de vue de l'Entretien:
Il existe de nombreuses raisons pour utiliser ANSI-92 syntaxe de JOINTURE sur la norme ANSI-89:
- Plus lisible, que les critères de JOINTURE est distincte de la clause where
- Moins susceptibles de manquer les critères de JOINTURE
- Cohérente en charge de la syntaxe pour REJOINDRE les types autres que l'INTÉRIEUR, faire des demandes facile à utiliser sur d'autres bases de données
- Clause where ne sert de filtration du produit cartésien des tables jointes
À partir d'une Conception de point de vue:
ANSI-92 syntaxe de JOINTURE est le patron, pas anti-modèle:
- Le but de la requête est plus évident; les colonnes utilisées par l'application est claire
- Il suit la règle de modularité sur l'utilisation de typage strict chaque fois que possible. Explicite est presque universellement mieux.
Conclusion
Court de familiarité et/ou de confort, je ne vois aucun avantage à continuer à utiliser ANSI-89 de la syntaxe de JOINTURE au lieu de la norme ANSI-92 syntaxe. Certains pourraient se plaindre que ANSI-92 syntaxe est plus verbeux, mais c'est ce qui rend explicite. Plus explicite, plus il est facile à comprendre et à maintenir.
Ce sont ces problèmes avec l'aide de la où la syntaxe (autrement connu comme la jointure implicite):
Tout d'abord, il est trop facile d'obtenir croisée accidentelle rejoint parce que les conditions de jointure ne sont pas juste à côté de la table des noms. Si vous avez des 6 tables jointes ensemble, il est facile de manquer un dans la clause where. Vous verrez que cela fixe, trop souvent, en utilisant le mot clé distinct. C'est unimmense performances de la base de données. Vous ne pouvez pas obtenir à un accident de la croix-jointure à l'aide de l'explicite de la syntaxe de jointure que ce sera un échec de la vérification de la syntaxe.
À droite et à gauche les jointures sont problématiques (Dans SQl server, vous ne sont pas la garantie d'obtenir des résultats corrects) dans l'ancienne syntaxe dans certaines bases de données. En outre, ils sont déconseillés dans SQL Server je sais.
Si vous avez l'intention d'utiliser une jointure croisée, qui n'est pas clair à partir de l'ancienne syntaxe. Il est clair en utilisant le courant ANSII standard.
Il est beaucoup plus difficile pour le responsable de voir exactement quels sont les champs de la partie de la jointure ou même le tables se regrouper dans quel ordre à l'aide de la syntaxe implicite. Cela signifie qu'il peut prendre plus de temps pour réviser les requêtes. J'ai connu très peu de gens qui, une fois qu'ils ont pris le temps de se sentir à l'aise avec l'explicite de la syntaxe de jointure, n'était jamais revenu à l'ancienne.
J'ai aussi remarqué que certaines personnes qui utilisent ces jointures implicites ne pas vraiment comprendre comment les jointures de travail et sont donc d'obtenir des résultats incorrects dans leurs requêtes.
Honnêtement, auriez-vous l'utilisation de tout autre type de code qui a été remplacé par une meilleure méthode de 18 ans?
La plupart des gens ont tendance à trouver un peu plus clair quant à ce qui est jointe à ce que la syntaxe de jointure. En outre, il a l’avantage d’être une norme.
Personnellement, j’ai « grandi » sur WHEREs, mais plus j’utilise la syntaxe de jointure plus je commence à voir comment il est plus clair.
Vous ne pouvez pas utiliser où se combinent les deux tables. Ce que vous pouvez faire est bien d’écrire :
Ici, la virgule est équivalente à l’écriture :
Serait-ce que vous écrivez que ? Non - parce que ce n'est pas ce que tu veux dire du tout. Vous ne voulez pas une jointure croisée, vous voulez une jointure interne. Mais lorsque vous écrivez des virgules, vous dites que CROSS JOIN et qui est source de confusion.