Compter les lignes
<<<
Utiliser plus d'une table Création et utilisation d'une base de données
>>>

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.

<< Utiliser plus d'une table >>
Compter les lignes Récupérer des informations à partir d'une table Création et utilisation d'une base de données