Bonsoir,
Envoyé par
novice_du_11
Pourriez-vous alors me donner un gabarit générique des requêtes que vous cherchiez à me faire trouver
A) En algèbre relationnelle, l'opérateur de jointure naturelle s'appelle JOIN et permet de marier deux tables, les tender foreplays se faisant sur la base des noms identiques des attributs des deux tables.
Concernant l'amorce de la pompe, on procède donc au mariage de table1 et table3 (sous-entendu donc, sur la base des noms identiques, à savoir table1_id) :table1 JOIN table3
Appelons T le bébé issu de ce mariage. T est en réalité une table dont l’en-tête (ou schéma, ou intension, notez l’orthographe) est composé des noms des attributs des mariés : table1_id, table1_nom, table1_prenom, table3_Id, table2_id (table1_id ne figure qu’une seule fois, car cet en-tête est un ensemble). Le corps de la table T (l’ensemble des lignes qui la constituent) est la concaténation des lignes de table1 et table3 pour lesquelles les valeurs des colonnes table1_id sont égales.
1 2 3
| T (table1_id table1_nom table1_prenom table3_id table2_id)
1 dupond marc 1 2
2 doe john 2 1 |
Il faut dans un 2e temps marier ce bébé avec table2 :
T JOIN table2
Le bébé U résultant de ce mariage est encore une table dont la constitution suit les mêmes règles :
1 2 3
| U (table1_id table1_nom table1_prenom table3_id table2_id table2_livre table2_genre)
1 dupond marc 1 2 bidon roman
2 doe john 2 1 asterix BD |
La projection finale appliquée à U permet de ne retenir que la partie qui vous intéresse (nom, prénom, livre, genre).
B) La norme SQL propose une syntaxe voisine. Au lieu d’écrire :
table1 JOIN table3
vous écrirez
table1 NATURAL JOIN table3
ou encore
table1 INNER JOIN table3 USING (table1_id)
C) Votre SGBD peut vous imposer une autre syntaxe. Par exemple SQL Server 2005 ne reconnaît pas l’expression "NATURAL JOIN" (pas plus que "USING"), aussi vous écrirez :
1 2
| table1 INNER JOIN table3
ON table1.table1_id = table3.table1_id |
D) Comme SQL n’est pas procédural mais déclaratif, vous êtes obligé de tout lui fournir d’un coup et je pense que votre difficulté réside ici. Comme je vous l’avais déjà dit, la jointure naturelle est associative et vous pouvez coder :
— Dans le cadre de l’algèbre relationnelle :
table1 JOIN table3 JOIN table2
— Dans le cadre de SQL Server :
1 2 3 4
| table1 INNER JOIN table3
ON table1.table1_id = table3.table1_id
INNER JOIN table2
ON table3.table2_id = table2.table2_id |
Si j’ai fait de mauvais copier/coller, à vous de rectifier...
Partager