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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.