Introduction aux jointures SQL
Formation
En Ligne
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Description
-
Typologie
Formation
-
Méthodologie
En ligne
Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.
Les Avis
Le programme
Ce tutoriel a pour but de vous faire découvrir les jointures en SQL. Pour le comprendre, il est nécessaire d'avoir lu la partie Les bases de données du tutoriel officiel de PHP/MySQL.
Attention : pour faciliter votre compréhension des différents concepts, je vous conseille de lire ce tutoriel en entier et dans l'ordre proposé, vous risqueriez sinon de rater certains enchaînements logiques.
Pré-requis : les bases de données relationnellesAvant d'utiliser les jointures, il faut que votre base de données relationnelle soit correctement conçue. Vous apprendrez dans cette partie quelques règles de base (loin d'être exhaustives) dans la conception des bases de données.
Pour ce faire, utilisons un exemple.
Citation
Vous êtes informaticien dans une agence de presse et vous devez stocker les articles des journalistes de l'agence dans une base de données relationnelle. Vous devez stocker pour chaque article son titre, son contenu et sa date, ainsi que le nom, le prénom et l'adresse e-mail de l'auteur. Plusieurs journaux achètent des articles à l'agence de presse en question. Celle-ci voudrait savoir quels journaux ont acheté quels articles. L'agence désire par ailleurs connaître, en plus de leur nom, l'adresse des journaux.
Règle n°1 : Regroupez dans une même table (= tableau de données) toutes les caractéristiques d'un élément.
Règle n°2 : Si une information se répète plusieurs fois dans une même table, il est préférable de créer une table dédiée à ce type d'information avec une relation entre les deux tables.
Ces règles n'étant pas faciles à comprendre de prime abord, appliquons-les à notre exemple.
On aurait a priori tendance à créer une table "articles" ayant la structure suivante (notez l'absence de caractères spéciaux, d'espaces et d'accents dans les noms des champs) :
articles
id_article
titre_article
nom_auteur
prenom_auteur
email_auteur
texte_article
date_article
Ce qui donne, avec quelques données (exemple) :
id_article
titre_article
nom_auteur
prenom_auteur
email_auteur
texte_article
date_article
1
Wall Street repasse dans le vert
Dupont
Jacques
jacques_dupont@email.com
blabla
26/01/2010
2
La Fed garde son taux directeur inchangé
Dubois
Marcel
mdubois@email.com
blibli
27/01/2010
3
Des pensionnés très occupés !
Dupont
Jacques
jacques_dupont@email.com
bloblo
28/01/2010
4
L'entretien du réseau routier laisse à désirer
Leroy
Nicole
nicole.leroy@email.com
blublu
28/01/2010
On remarque cependant qu’il y a répétition des informations sur l'auteur. En effet, un auteur peut avoir écrit plusieurs articles !
On va donc créer une table "auteurs" en relation avec la table "articles" pour éviter d'avoir une répétition inutile de toutes les informations sur les auteurs. Cela permet en pratique, si vous voulez modifier un élément (par exemple l'adresse e-mail de l'auteur), de ne devoir le faire qu’une seule fois !
La structure de la table auteurs est la suivante :
auteurs
id_auteur
nom_auteur
prenom_auteur
email_auteur
Ce qui donne en données :
id_auteur
nom_auteur
prenom_auteur
email_auteur
1
Dubois
Marcel
mdubois@email.com
2
Dupont
Jacques
jacques_dupont@email.com
3
Leroy
Nicole
nicole.leroy@email.com
La nouvelle structure de la table "articles" est la suivante :
articles
id_article
titre_article
id_auteur
texte_article
date_article
Ce qui donne en données :
id_article
titre_article
id_auteur
texte_article
date_article
1
Wall Street repasse dans le vert
2
blabla
26/01/2010
2
La Fed garde son taux directeur inchangé
1
blibli
27/01/2010
3
Des pensionnés très occupés !
2
bloblo
28/01/2010
4
L'entretien du réseau routier laisse à désirer
3
blublu
28/01/2010
On a donc créé une relation numérique entre deux tables pour éviter la répétition d'informations. On comprend l'importance du champ "id" de chaque table qui doit absolument prendre une valeur différente/unique pour chaque ligne de la table.
Le champ de type "id" (première colonne), qui contient un identifiant unique pour chaque élément (ligne) de la table, est appelé clé primaire (Primary Key = PK).
Dans la table articles, on a un autre type de champ "id", qui peut en effet prendre plusieurs fois la même valeur. C'est ce qu'on appelle une clé étrangère (Foreign Key = FK). Il correspond à la clé primaire d'une autre table et permet de créer une relation avec celle-ci.
Dans notre cas, le champ (clé étrangère) "id_auteur" de la table articles correspond au champ (clé primaire) "id_auteur" de la table auteurs. On nomme généralement de la même façon la clé primaire et la clé étrangère relative. La relation PK – FK est appelée relation 1 – N.
Règle n°3 : Il peut arriver que vous rencontriez une relation N – N, c'est-à-dire une relation où l'on a une répétition des éléments d'une table A dans une autre table B, et également une répétition de plusieurs éléments de la table B dans la table A. Pour optimiser les tables et éviter ces répétitions, il faut dans ce cas créer une table intermédiaire dans laquelle on stockera uniquement des "id".
Mise en pratique :
Reprenons notre exemple. En plus des tables articles et auteurs, créons la table "journaux".
journaux
id_journal
nom_journal
adresse_journal
id_journal
nom_journal
adresse_journal
1
Le Monde
Paris
2
Le Figaro
Paris
3
Le Soir
Bruxelles
4
Libération
Paris
On veut stocker les articles achetés par ces journaux à l'agence de presse. Un journal peut avoir acheté plusieurs articles, et un article peut avoir été acheté par plusieurs journaux. On a donc une relation N – N.
Il ne nous est pas possible de stocker plusieurs articles pour un même journal (on a une seule ligne par journal dans la table journaux), il n'est pas non plus possible de faire l'inverse (on ne peut pas stocker plusieurs journaux pour un même article, on a également une seule ligne par article dans la table articles). On est donc obligés de...
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Introduction aux jointures SQL