| 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 :
 
En prenant cela en considération, le code  
CREATE TABLE
  pour la table  
evenement
  
doit ressembler à ceci :
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.
 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 :| 
mysql> CREATE TABLE evenement (nom VARCHAR(20), date DATE,-> type VARCHAR(15), remarque VARCHAR(255));
 | 
 
| 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 :
 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 ?| 
mysql> LOAD DATA LOCAL INFILE "evenement.txt" INTO TABLE evenement;
 | 
 
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 :
 Il y a plusieurs choses à noter concernant 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           |
 +--------+------+--------------------------------+
 | 
 
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 :
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. 
 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.| 
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   |
 +--------+------+--------+------+---------+
 | 
 |