La table animaux
contient la liste des animaux que vous avez. Vous pourriez vouloir enregistrer d'autres informations à leur sujet, telles que des évènements de leur vie, comme les visites chez le vétérinaire, ou les dates des portées de petits : vous avez besoin d'une autre table. A quoi va t elle ressembler ?
- Elle va devoir contenir les noms des animaux, pour savoir à qui c'est arrivé.
- Il faut une date pour l'événement.
- Il faut un champs de description des événements
- Il faut aussi un champs de catégorie d'événement.
Avec ces indications, la requête de CREATE TABLE
va ressembler à ceci :
mysql> CREATE TABLE event (nom VARCHAR(20), date DATE,
-> type VARCHAR(15), remark VARCHAR(255));
Comme pour la table animaux
table, il est plus facile de charger les premières valeurs à partir d'un fichier, dont les champs sont délimités avec des tabulations :
Chargez les informations comme ceci :
mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;
Etant donné ce que vous avez appris avec les requêtes sur la table animaux
table, vous devriez être capable d'exécuter des requêtes sur la table event
; les principes sont les mêmes. Mais la table event
pourrait se révéler insuffisante pour répondre à vos questions.
Supposons que vous voulez avoir l'age des animaux lorsqu'ils ont eu leur portée. La table event
indique quand ils ont eu leur portée, mais pour calculer l'age de la mère, il faut aussi sa date de naissance. Etant donné que cette date est stockée dans la table animaux
, vous avez besoin des deux tables dans la même requête :
mysql> SELECT animaux.nom, (TO_DAYS(date) - TO_DAYS(naissance))/365 AS age, remarque
-> FROM animaux, event
-> WHERE animaux.nom = event.nom AND type = "portée";
+--------+------+-------------------------------+
| nom | age | remarque |
+--------+------+-------------------------------+
| Fluffy | 2.27 | 4 chatons, 3 femelles, 1 male |
| Buffy | 4.12 | 5 chiots, 2 femelles, 3 male |
| Buffy | 5.10 | 3 chiots, 3 femelles |
+--------+------+-------------------------------+
Il faut remarquer plusieurs choses à propos de cette requête :
- La clause
FROM
est une liste contenant les noms des deux tables, car la requête clause va chercher des informations dans ces deux tables.
- Lorsque vous combinez des informations entre plusieurs tables, il faut spécifier comment les lignes vont correspondre. Ici, la correspondance est simple, et basée sur la colonne
nom
. La requête utilise une clause WHERE
pour rechercher et assortir les valeurs des deux tables, avec la colonne nom
.
- Etant donné que les deux tables ont une colonne
nom
il faut préciser la table d'appartenance de ces colonnes à chaque référence. C'est facilement faisable en ajoutant simplement le nom de la table devant le nom de la colonne.
Les regroupements sont aussi possibles sur une même table. Cela revient à comparer des valeurs d'une table avec d'autres valeurs de la même table. Par exemple, pour marier vos animaux entre eux, vous pouvez faire un regroupement de la table animaux
avec elle-même pour rechercher les males et femelles de la même espèce :
mysql> SELECT p1.nom, p1.genre, p2.nom, p2.genre, p1.espece
-> FROM animaux AS p1, animaux AS p2
-> WHERE p1.espece = p2.espece AND p1.genre = "f" AND p2.genre = "m";
+--------+-------+--------+-------+---------+
| nom | genre | nom | genre | espece |
+--------+-------+--------+-------+---------+
| Fluffy | f | Claws | m | chat |
| Buffy | f | Fang | m | chien |
| Buffy | f | Bowser | m | chien |
+--------+-------+--------+-------+---------+
Dans cette requête, plusieurs alias sont définis pour pouvoir faire référence à chaque instance de la table, et à la bonne colonne.