Maison >base de données >tutoriel mysql >Exemples d'utilisation avancée de jointure-auto-jointure mysql

Exemples d'utilisation avancée de jointure-auto-jointure mysql

巴扎黑
巴扎黑original
2017-05-11 10:51:561350parcourir

Auto-jointure

Comme mentionné précédemment, l'une des principales raisons d'utiliser des alias de table est de pouvoir référencer la même table plus d'une fois dans une seule instruction SELECT. Voici un exemple.

Supposons que vous rencontriez un problème avec un article (dont l'ID est DTNTR ) et que vous souhaitiez savoir si d'autres articles produits par le fournisseur qui produit cet article ont également ces problèmes. Cette requête nécessite d'abord de trouver

le fournisseur qui produit l'article avec l'ID DTNTR, puis de trouver d'autres articles produits par ce fournisseur.

Voici une façon de résoudre ce problème :

Entrée :

select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');

Sortie :

Exemples dutilisation avancée de jointure-auto-jointure mysql

Analyse : C'est la première solution qui utilise des sous-requêtes. L'instruction SELECT interne effectue une recherche simple et renvoie le vend_id du fournisseur d'articles dont l'ID de production est DTNTR. Cet identifiant est utilisé dans la clause WHERE de la requête externe pour récupérer tous les articles produits par ce fournisseur.

Regardez maintenant la même requête en utilisant les jointures :

Entrée :

Sortie :

select p1.prod_id,p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';

Analyse : Les deux tables requises dans cette requête sont en fait la même table, donc la table products apparaît deux fois dans la clause FROM. Bien que cela soit parfaitement légal, la référence aux produits est ambiguë car MySQL ne sait pas à quelle instance de la table products vous faites référence.

Exemples dutilisation avancée de jointure-auto-jointure mysqlPour résoudre ce problème, des alias de table sont utilisés. La première occurrence de products est l'alias p1 et la deuxième occurrence est l'alias p2 . Ces alias peuvent désormais être utilisés comme noms de table. Par exemple, une instruction SELECT utilise le préfixe p1 pour donner explicitement le nom complet de la colonne requise. Sinon, MySQL renverra une erreur car il y a deux colonnes nommées respectivement prod_id et prod_name. MySQL ne sait pas quelle colonne est souhaitée (même s'il s'agit en fait de la même colonne). WHERE (en faisant correspondre vend_id dans p1 et vend_id dans p2) joint d'abord les deux tables, puis filtre les données par prod_id dans la deuxième table, renvoyant les données requises.

Utilisez des auto-jointures au lieu de sous-requêtes. Les auto-jointures sont souvent utilisées comme instructions externes pour remplacer les instructions de sous-requête utilisées lors de la récupération de données de la même table. Bien que le résultat final soit le même, le traitement des jointures est parfois beaucoup plus rapide que le traitement des sous-requêtes. Vous devriez essayer les deux méthodes pour déterminer laquelle est la plus performante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn