8.4.3.2 Selectioner une partie des lignes

Il est bien sûr possible de ne sélectionner quelques lignes dans une table. Mettons que vous souhaitiez vérifier que la nouvelle date de naissance de Bowser's a bien été prise en compte. Il suffit de sélectionner l'enregistrement de Bowser comme ceci :

mysql> SELECT * FROM animaux WHERE nom = "Bowser";
+--------+--------------+---------+--------+----------------+------------+
| nom    | proprietaire | espece  | genre  | naissance      | mort       |
+--------+--------------+---------+--------+----------------+------------+
| Bowser | Diane        | chien   | m      | 1989-08-31     | 1995-07-29 |
+--------+--------------+---------+--------+----------------+------------+

Le résultat confirme bien que l'année de naissance est 1989, et non plus 1998.

Les comparaisons de chaîne sont généralement insensible à la casse : on aurait plus préciser le nom "bowser", "BOWSER", etc. Le résultat aurait été le même.

Vous pouvez faire des recherches sur d'autres colonnes que nom. Par exemple, si vous voulez savoir quels animaux sont nés 1998, faites un test sur la colonne naissance :

mysql> SELECT * FROM animaux WHERE naissance >= "1998-1-1";
+----------+--------------+---------+--------+----------------+------------+
| nom      | proprietaire | espece  | genre  | naissance      | mort       |
+----------+--------------+---------+--------+----------------+------------+
| Chirpy   | Gwen         | oiseau  | f      | 1998-09-11     | NULL       |
| Puffball | Diane        | hamster | f      | 1999-03-30     | NULL       |
+----------+--------------+---------+--------+----------------+------------+

Vous pouvez aussi combiner les conditions : par exemple, pour rechercher les chiennes

mysql> SELECT * FROM animaux WHERE espece = "chien" AND genre = "f";
+----------+--------------+---------+--------+----------------+------------+
| nom      | proprietaire | espece  | genre  | naissance      | mort       |
+----------+--------------+---------+--------+----------------+------------+
| Buffy    | Harold       | chien   | f      | 1989-05-13     | NULL       |
+----------+--------------+---------+--------+----------------+------------+

La requête précédente utilisait l'opérateur logique AND (ET) Il y a aussi un opérateur OR (OU) :

mysql> SELECT * FROM animaux WHERE espece = "serpent" OR espece = "oiseau";
+----------+--------------+---------+--------+----------------+------------+
| nom      | proprietaire | espece | genre  | naissance      | mort       |
+----------+--------------+---------+--------+----------------+------------+
| Chirpy   | Gwen         | oiseau  | f      | 1998-09-11     | NULL       |
| Whistler | Gwen         | oiseau  | NULL   | 1997-12-09     | NULL       |
| Slim     | Benny        | serpent | m      | 1996-04-29     | NULL       |
+----------+--------------+---------+--------+----------------+------------+

AND et OR peut être utilisés dans la même requête. C'est alors une bonne idée d'utiliser des parenthèses pour préciser les regroupements :

mysql> SELECT * FROM animaux WHERE (espece = "chat" AND genre = "m")
    -> OR (espece = "chien" AND genre = "f");
+----------+--------------+---------+--------+----------------+------------+
| nom      | proprietaire | espece  | genre  | naissance      | mort       |
+----------+--------------+---------+--------+----------------+------------+
| Claws    | Gwen         | chat    | m      | 1994-03-17     | NULL       |
| Buffy    | Harold       | chien   | f      | 1989-05-13     | NULL       |
+----------+--------------+---------+--------+----------------+------------+