3.3.4 Récupérer des informations à partir d'une table
3.3 Création et utilisation d'une base de données
3 Tutoriels d'introduction
Manuel de Référence MySQL 4.1 : Version Française
. Sélectionner toutes les données . Sélectionner des lignes particulières . Sélectionner des colonnes particulières . Trier les enregistrements . Calcul sur les Dates . Travailler avec la valeur NULL . Recherche de modèles . Compter les lignes ->Utiliser plus d'une table
|
3.3.4.9 Utiliser plus d'une table
La table
animal
garde les enregistrements de vos animaux. Si vous voulez
enregistrer d'autres informations concernant vos animaux, comme
les événements de leurs vies, les visites chez le
vétérinaire, ou encore lorsqu'ils ont mis bas, vous avez besoin
d'une autre table.
De quoi a besoin cette table ? Elle doit :
-
Contenir le nom de l'animal pour savoir à quel animal cet événement se rattache.
-
Une date pour savoir quand a eu lieu l'événement.
-
Un champ qui décrit l'événement.
-
Un champ de type événement, si vous voulez être capable de cataloguer les événements.
En prenant cela en considération, le code
CREATE TABLE
pour la table
evenement
doit ressembler à ceci :
mysql> CREATE TABLE evenement (nom VARCHAR(20), date DATE, -> type VARCHAR(15), remarque VARCHAR(255));
|
Tout comme la table
animal
, il est facile d'enregistrer les enregistrements
initiaux en créant un fichier texte délimité par des tabulations, contenant
l'information :
nom
|
date
|
type
|
remarque
|
Fluffy |
1995-05-15 |
mise bas |
4 chatons, 3 femelles, 1 mâles
|
Buffy |
1993-06-23 |
mise bas |
5 chiots, 2 femelles, 3 mâles
|
Buffy |
1994-06-19 |
mise bas |
3 chiots, 3 femelles
|
Chirpy |
1999-03-21 |
vétérinaire |
Redresser le bec
|
Slim |
1997-08-03 |
vétérinaire |
Cotes cassées
|
Bowser |
1991-10-12 |
chenil |
|
Fang |
1991-10-12 |
chenil |
|
Fang |
1998-08-28 |
anniversaire |
Don d'un nouvel objet de mastication
|
Claws |
1998-03-17 |
anniversaire |
Don d'un nouveau collier anti-puces
|
Whistler |
1998-12-09 |
anniversaire |
Premier anniversaire
|
Chargez ces enregistrements comme cela :
mysql> LOAD DATA LOCAL INFILE "evenement.txt" INTO TABLE evenement;
|
En se basant sur ce que vous avez appris des requêtes effectuées sur la table
animal
, vous devriez être capable de faire des recherches sur les enregistrements de la
table
evenement
; le principe est le même. Quand devez-vous vous demander si
la table
evenement
est seule suffisante pour répondre à votre question ?
Supposez que vous voulez trouver l'âge de chaque animal lorsqu'il a mis bas.
La table
evenement
indique quand cela s'est produit, mais pour le calcul de l'âge
de la mère, vous avez besoin de sa date de naissance. Parce que ces informations sont
stockées dans la table
animal
, vous avez besoin des deux tables pour cette
requête :
mysql> SELECT animal.nom, -> (TO_DAYS(date) - TO_DAYS(naissance))/365 AS age, -> remarque -> FROM animal, evenement -> WHERE animal.nom = evenement.nom AND type = "mise bas"; +--------+------+--------------------------------+ | nom | age | remarque | +--------+------+--------------------------------+ | Fluffy | 2.27 | 4 chatons, 3 femelles, 1 mâle | | Buffy | 4.12 | 5 chiots, 2 femelles, 3 mâles | | Buffy | 5.10 | 3 chiots, 3 femelles | +--------+------+--------------------------------+
|
Il y a plusieurs choses à noter concernant cette requête :
-
La clause
FROM
liste les deux tables parce que la requête a besoin d'informations
contenues dans ces deux tables.
-
Lorsque vous combinez (joignez) des informations provenant de plusieurs tables,
vous devez spécifier quels enregistrements d'une table peuvent être associés à quels
enregistrements des autres tables. C'est aisé parce qu'elles ont toutes les deux une
colonne
nom
. La requête utilise la clause
WHERE
pour faire correspondre
les enregistrements des deux tables sur les valeurs de la colonne
nom
.
-
Parce que la colonne
nom
apparaît dans les deux tables, vous devez être
explicite concernant la table que vous utilisez lorsque vous vous référez à cette
colonne. C'est fait en faisant précéder le nom de la colonne par le nom de la table.
Vous n'avez pas besoin de deux tables différentes pour effectuer une jointure.
Quelques fois, c'est plus facile de joindre une table sur elle-même, si vous voulez
comparer des enregistrements dans une table avec d'autres enregistrements de la
même table. Par exemple, pour trouver des paires multiples parmi vos animaux,
vous pouvez joindre la table
animal
sur elle-même pour trouver les paires
mâles / femelles par rapport à l'espèce :
mysql> SELECT p1.nom, p1.sexe, p2.nom, p2.sexe, p1.espece -> FROM animal AS p1, animal AS p2 -> WHERE p1.espece = p2.espece AND p1.sexe = "f" AND p2.sexe = "m"; +--------+------+--------+------+---------+ | nom | sexe | nom | sexe | espece | +--------+------+--------+------+---------+ | Fluffy | f | Claws | m | chat | | Buffy | f | Fang | m | chien | | Buffy | f | Bowser | m | chien | +--------+------+--------+------+---------+
|
Dans cette requête, nous avons spécifié des alias pour les noms de tables dans l'ordre
de référence des colonnes et ainsi maintenir directement à quelle instance de la table
chaque colonne est associée.
|