Pb Jointure - produit cartesien
Fermé
Pierre81
-
24 avril 2008 à 19:14
R4f Messages postés 441 Date d'inscription dimanche 13 janvier 2008 Statut Membre Dernière intervention 5 mai 2008 - 25 avril 2008 à 15:59
R4f Messages postés 441 Date d'inscription dimanche 13 janvier 2008 Statut Membre Dernière intervention 5 mai 2008 - 25 avril 2008 à 15:59
A voir également:
- Excel produit cartésien
- Clé de produit windows 10 gratuit - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
1 réponse
R4f
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
24 avril 2008 à 20:49
24 avril 2008 à 20:49
Salut Pierre81,
Ton cas est assez mal expliqué, donc je vais peut-être répondre à côté de la plaque...
Le produit cartésien est une notion ensembliste. Cf. : https://fr.wikipedia.org/wiki/Produit_cart%C3%A9sien#D.C3.A9finition
Si tu as 5 éléments dans un ensemble A et 6 dans un ensemble B, leur produit cartésien comprend 5 x 6 élements, soit 30.
Lorsqu'on fait une jointure, on parle symboliquement de partir de ce produit cartésien et de réduire les appariements (les couples d'éléments de A et de B) selon une contrainte d'égalité entre 2 champs.
L'exemple bateau est celui des employés et des services dans lesquels ils travaillent :
Si on veut faire la jointure des 2 tables, il sera assez naturel de faire correspondre le champ id_service de la table Employés avec le champ id de la table Services
En SQL relativement standard, cela donne
SELECT nom_employé, nom_service FROM Employés, Services WHERE id_service = id
ou plus proprement (avec jointure explicite)
SELECT nom_employé, nom_service FROM Employés INNER JOIN Services ON id_service = id
On appelle cela une jointure interne.
Le résultat est
Il y a donc 6 résultats.
Par contre le produit cartésien Employés x Services comporte 24 résultats (6 x 4).
Raph
Ton cas est assez mal expliqué, donc je vais peut-être répondre à côté de la plaque...
Le produit cartésien est une notion ensembliste. Cf. : https://fr.wikipedia.org/wiki/Produit_cart%C3%A9sien#D.C3.A9finition
Si tu as 5 éléments dans un ensemble A et 6 dans un ensemble B, leur produit cartésien comprend 5 x 6 élements, soit 30.
Lorsqu'on fait une jointure, on parle symboliquement de partir de ce produit cartésien et de réduire les appariements (les couples d'éléments de A et de B) selon une contrainte d'égalité entre 2 champs.
L'exemple bateau est celui des employés et des services dans lesquels ils travaillent :
Employés (nom_employé, id_service) Jojo | 1 Lulu | 1 Gégé | 2 Toto | 3 Rara | 4 Coco | 4 Services (id, nom_service) 1 | Comptabilité 2 | Direction générale 3 | Achats 4 | Informatique
Si on veut faire la jointure des 2 tables, il sera assez naturel de faire correspondre le champ id_service de la table Employés avec le champ id de la table Services
En SQL relativement standard, cela donne
SELECT nom_employé, nom_service FROM Employés, Services WHERE id_service = id
ou plus proprement (avec jointure explicite)
SELECT nom_employé, nom_service FROM Employés INNER JOIN Services ON id_service = id
On appelle cela une jointure interne.
Le résultat est
Jojo | Comptabilité Lulu | Comptabilité Gégé | Direction générale Toto | Achats Rara | Informatique Coco | Informatique
Il y a donc 6 résultats.
Par contre le produit cartésien Employés x Services comporte 24 résultats (6 x 4).
Raph
25 avril 2008 à 10:19
Je vais essayer de mieux expliquer :
Dans une table T1, j'ai deux lignes avec le mm NB
dans la table T2, j'ai 12 lignes avec le mm NB
en faisant une requête avec la jointure T1.NB = T2.NB, combien de lignes dois-je obtenir ?
Je pensais devoir en obtenir 24, mais j'en obtiens 12. C'est là mon souci, sur le nombre de lignes rendues.
Merci d'avance.
25 avril 2008 à 10:20
Donne des exemples !
25 avril 2008 à 15:15
Je n'ai pas d'exemple précis à donner. les tables sont monstrueuses.
Mais tant pis. Merci beaucoup quand même.
25 avril 2008 à 15:59
De toute façon, c'est normal d'en obtenir que 12 et non pas 24. Car tu fis une jointure sur l'égalité de 2 champs (l'un dans une table, l'autre dans l'autre table) donc c'est normal d'avoir autant de résultats que la table 'maitresse' (dans mon exemple, c'est Employés) puisque à chaque employé ne correspond qu'un et un seul enregistrement de la table Services.
Dans mon exemple, si j'avais le double de résultats, cela voudrait dire que les employés sont dans 2 services, ce qui n'est pas le cas...
Raph