SELECT * FROM vehicules; nous donne tout, sans distinction. Mais la plupart du temps, nous cherchons des données qui répondent à des critères spécifiques.
La clause WHERE agit comme un filtre. Elle permet de ne conserver que les lignes qui respectent une ou plusieurs conditions que l'on définit.
On ajoute la clause WHERE juste après FROM.
SELECT colonnes
FROM nom_de_la_table
WHERE condition(s);Une condition est une expression qui est soit vraie, soit fausse pour chaque ligne (par exemple, annee > 2021).
Pour illustrer les filtres, nous ajoutons quelques lignes à notre table, dont une avec un prix non défini (NULL).
| id | marque | modele | annee | prix |
|---|---|---|---|---|
| 1 | Renault | Clio | 2021 | 22000 |
| 2 | Peugeot | 208 | 2022 | 24000 |
| 3 | Citroën | C3 | 2021 | 21500 |
| 4 | Renault | Arkana | 2023 | 32000 |
| 5 | Tesla | Model 3 | 2022 | 45000 |
| 6 | Peugeot | 2008 | 2023 | 28000 |
| 7 | Dacia | Spring | 2022 | NULL |
On peut utiliser les opérateurs classiques pour filtrer des nombres, des textes ou des dates.
(=, >, <, >=, <=, <> ou !=)
Requête : (On cherche tous les véhicules de la marque "Renault")
SELECT * FROM vehicules
WHERE marque = 'Renault';```
*Note : Le texte doit être entre guillemets simples `'`.*
**Résultat :**
| id | marque | modele | annee | prix |
|:---|:---|:---|:---|:---|
| 1 | Renault | Clio | 2021 | 22000 |
| 4 | Renault | Arkana | 2023 | 32000 |
**Requête :** (Les véhicules dont le prix est supérieur à 30000)
```sql
SELECT marque, modele, prix FROM vehicules
WHERE prix > 30000;Résultat :
| marque | modele | prix |
|---|---|---|
| Renault | Arkana | 32000 |
| Tesla | Model 3 | 45000 |
AND: Les deux conditions doivent être vraies.OR: Au moins une des deux conditions doit être vraie.
Requête : (Les véhicules "Peugeot" de l'année 2023)
SELECT * FROM vehicules
WHERE marque = 'Peugeot' AND annee = 2023;Résultat :
| id | marque | modele | annee | prix |
|---|---|---|---|---|
| 6 | Peugeot | 2008 | 2023 | 28000 |
Requête : (Les véhicules de 2021 ou dont le prix est inférieur à 22000)
SELECT * FROM vehicules
WHERE annee = 2021 OR prix < 22000;Résultat :
| id | marque | modele | annee | prix |
|---|---|---|---|---|
| 1 | Renault | Clio | 2021 | 22000 |
| 3 | Citroën | C3 | 2021 | 21500 |
BETWEEN: Simplifie la recherche dans une plage de valeurs (inclusives).IN: Vérifie si une valeur fait partie d'une liste.
Requête : (Les véhicules dont le prix est compris entre 20000 et 25000 euros)
SELECT marque, modele, prix FROM vehicules
WHERE prix BETWEEN 20000 AND 25000;Résultat :
| marque | modele | prix |
|---|---|---|
| Renault | Clio | 22000 |
| Peugeot | 208 | 24000 |
| Citroën | C3 | 21500 |
Requête : (Les véhicules de marque "Renault" ou "Citroën")
SELECT * FROM vehicules
WHERE marque IN ('Renault', 'Citroën');Résultat :
| id | marque | modele | annee | prix |
|---|---|---|---|---|
| 1 | Renault | Clio | 2021 | 22000 |
| 3 | Citroën | C3 | 2021 | 21500 |
| 4 | Renault | Arkana | 2023 | 32000 |
LIKE est utilisé pour rechercher des chaînes de caractères qui correspondent à un certain motif.
%: Remplace n'importe quelle séquence de zéro, un ou plusieurs caractères._: Remplace un seul caractère.
Requête : (Les modèles qui commencent par la lettre 'C')
SELECT modele FROM vehicules
WHERE modele LIKE 'C%';Résultat :
| modele |
|---|
| Clio |
| C3 |
Pour filtrer les lignes où une valeur est absente, on ne peut pas utiliser = NULL. La syntaxe correcte est IS NULL (ou IS NOT NULL pour l'inverse).
Requête : (Le véhicule dont le prix n'est pas renseigné)
SELECT * FROM vehicules
WHERE prix IS NULL;Résultat :
| id | marque | modele | annee | prix |
|---|---|---|---|---|
| 7 | Dacia | Spring | 2022 | NULL |
| Opérateur | Rôle | Exemple |
|---|---|---|
WHERE |
Clause principale pour filtrer les lignes. | WHERE annee = 2023 |
=, >, <> |
Opérateurs de comparaison de base. | WHERE prix > 25000 |
AND |
Combine des conditions (toutes doivent être vraies). | WHERE marque = 'A' AND prix < 100 |
OR |
Combine des conditions (au moins une doit être vraie). | WHERE marque = 'A' OR marque = 'B' |
BETWEEN |
Vérifie si une valeur est dans une plage inclusive. | WHERE prix BETWEEN 100 AND 200 |
IN |
Vérifie si une valeur est dans une liste. | WHERE marque IN ('A', 'B', 'C') |
LIKE |
Recherche un motif dans du texte. | WHERE modele LIKE 'Model %' |
IS NULL |
Vérifie si une valeur est nulle (absente). | WHERE prix IS NULL |