Maison >base de données >tutoriel mysql >Comment utiliser la clause WHERE pour joindre plusieurs tables dans MySQL

Comment utiliser la clause WHERE pour joindre plusieurs tables dans MySQL

巴扎黑
巴扎黑original
2017-05-10 13:24:372572parcourir

L'importance de la clause WHERE

Il peut sembler un peu étrange d'utiliser la clause WHERE pour établir une relation de jointure, mais en fait, il y a une très bonne raison. N'oubliez pas que lors de la jointure de plusieurs tables dans une instruction SELECT, les relations correspondantes sont construites à la volée. Il n'y a rien dans la définition d'une table de base de données qui indique à MySQL comment joindre les tables. Vous devez le faire vous-même. Lorsque vous joignez deux tables, vous associez en réalité chaque ligne de la première table à chaque ligne de la deuxième table. La clause WHERE agit comme un filtre, qui inclut uniquement les lignes qui correspondent à la condition donnée (ici, la condition de jointure). Sans clause WHERE, chaque ligne de la première table est associée à chaque ligne de la deuxième table, qu'elles s'emboîtent ou non logiquement.

Produit cartésien Le résultat renvoyé par une relation de table sans conditions de jointure est le produit cartésien. Le nombre de lignes récupérées sera le nombre de lignes du premier tableau multiplié par le nombre de lignes du deuxième tableau.

Entrée :

select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;

Analyse : Le produit cartésien correspondant n'est pas celui que nous voulons. Les données renvoyées ici associent chaque produit à chaque fournisseur et incluent

produits avec des fournisseurs incorrects. En fait, certains fournisseurs ne proposent aucun produit.

N'oubliez pas la clause WHERE. Vous devez vous assurer que toutes les jointures ont une clause WHERE, sinon MySQL renverra beaucoup plus de données que vous ne le souhaiteriez. De la même manière, l'exactitude de la clause WHERE doit être assurée. Des conditions de filtre incorrectes entraîneront le renvoi par MySQL de données incorrectes.

Jointure croisée Parfois, nous entendons des types de jointure qui renvoient un produit cartésien appelé jointure croisée.

Jointure interne

La jointure utilisée jusqu'à présent est appelée équijointure et est basée sur un test d'égalité entre deux tables. Cette connexion est également appelée connexion interne. En fait, une syntaxe légèrement différente peut être utilisée pour ce type de jointure afin de spécifier explicitement le type de jointure. L'instruction SELECT suivante renvoie exactement les mêmes données que l'exemple précédent :

Entrée :

select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

Analyse : le SELECT dans cette instruction est le même que l'instruction SELECT précédente, mais le FROM la clause est différente. Ici, la relation entre les deux tables fait partie de la clause FROM, spécifiée avec INNERJOIN. Lors de l'utilisation de cette syntaxe, la condition de jointure est donnée avec une clause ON spécifique au lieu d'une clause WHERE. La condition réelle transmise à ON est la même que celle transmise à WHERE.

Quelle syntaxe utiliser La spécification ANSI SQL préfère la syntaxe INNER JOIN. De plus, même s'il est effectivement plus simple de définir des jointures à l'aide d'une clause WHERE, l'utilisation d'une syntaxe de jointure explicite garantit que les conditions de jointure ne sont pas oubliées, ce qui peut parfois avoir un impact sur les performances.


Joindre plusieurs tables

SQL n'a aucune idée du nombre de tables qui peuvent être jointes une limite d'instruction SELECT. Les règles de base pour créer des jointures sont les mêmes. Répertoriez d’abord toutes les tables, puis définissez les relations entre les tables. Par exemple :

Entrée :

select prod_name,vend_name,prod_price,quantity from orderitems,products,vendors where products.vend_id = vendors.vend_id and orderitems.prod_id = products.products.prod_id and order_num = 20005;

Sortie :

Comment utiliser la clause WHERE pour joindre plusieurs tables dans MySQL

Analyse : Cet exemple montre les articles dans le numéro de commande 20005. Les articles de commande sont stockés dans la table orderitems. Chaque produit est stocké par son ID produit, qui référence le produit dans la table des produits. Ces produits sont liés aux fournisseurs correspondants dans la table des fournisseurs via l'ID du fournisseur, qui est stocké dans l'enregistrement de chaque produit. La clause FROM répertorie ici trois tables, et la clause WHERE définit ces deux conditions de jointure, et la troisième condition de jointure est utilisée pour filtrer les éléments dans l'ordre 20005.

Considérations sur les performances MySQL associe chaque table spécifiée pour gérer la jointure au moment de l'exécution. Ce traitement peut être très gourmand en ressources, il faut donc veiller à ne pas joindre des tables inutiles. Plus il y a de tables jointes, plus la dégradation des performances est importante.

Expérimentez davantage Comme vous pouvez le constater, il existe généralement plusieurs façons d'effectuer une opération SQL donnée. Il existe rarement une manière absolument bonne ou absolument mauvaise de procéder. Les performances peuvent être affectées par le type d'opération, la quantité de données dans la table, la présence d'index ou de clés et plusieurs autres conditions. Il est donc nécessaire d’expérimenter différents mécanismes de sélection pour découvrir ce qui fonctionne le mieux dans des situations spécifiques.

[Recommandations associées]

1. Qu'est-ce qu'une sous-requête MySQL ? Comment filtrer à l'aide d'une sous-requête ?

2.mysql crée des champs calculés à l'aide de sous-requêtes

3. Que sont les jointures et les tables relationnelles dans MySQL ?

4. Pourquoi utiliser les jointures et comment créer des jointures

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