Conditions (where, between, joker)
Conditions et restriction en SQL
Dans un autre tuto, vous avez peut-être vu un passage sur HAVING qui nous a déjà donné un aperçu de ce qu'est une restriction. Mais avec la clause WHERE on peut avoir une multitude de possibilités sur les restrictions.
Cela nous permet d'introduire des critères de sélection dans les requêtes SQL. Autrement dit, il s'agit de dire que la requête ne concerne que telles ou telles lignes dont les données satisfont à une ou plusieurs conditions fixées dans la clause WHERE.
Utilisation simple de WHERE dans une requête
On peut utiliser WHERE de façon très simple comme la clause HAVING. Pour faire une restriction sur les valeurs manquantes, en utilisant WHERE dans le même exemple (voir tuto précédent).
On peut donc avoir une requête de la forme :
SELECT * FROM etudiant WHERE moyenne IS NULL
Ceci nous donne la liste des étudiants dont la moyenne n'est pas renseignée. A l'inverse, avec le prédicat ISNOTNULL, la requête nous renvoie la liste des étudiants pour lesquels on a renseigné la moyenne.
SELECT * FROM etudiant WHERE moyenne IS NOT NULL
Conditions sur des valeurs en SQL
On peut émettre une condition exprimée avec les comparateurs arithmétiques suivants :
- =
- !=
- >
- <
- >=
- <=
- <>
- !>
- !<
On peut alors ne sélectionner qu'un certain nombre de lignes qui ont les valeurs indiquées.
Ainsi, pour avoir juste la liste des étudiants ayant la moyenne supérieure à 17 on utilisera cette requête :
Requête SQL
SELECT * FROM etudiant WHERE moyenne >17.
Résultat
id_etudiant | nom | prenom | moyenne | domicile |
---|---|---|---|---|
5 | Suza | Alvaro | 19 | St Vallier |
7 | Lambertini | Paco | 19 | St Rambert |
9 | Maillet | Daniel | 18 | Lyon |
Plusieurs conditions : AND, OR et NOT
A l'aide des opérateurs logiques (AND, OR, NOT), on peut associer plusieurs conditions.
Sachant que AND veut dire ET, OR veut dire OU et NOT veut dire NON.
Si l'on veut par exemple avoir la liste des étudiants qui ont eu une moyenne supérieure ou égale à 13 et inférieure ou égale à 16, voici la requête correspondante.
Requête SQL
SELECT * FROM etudiant WHERE moyenne >=13 AND moyenne <=16
Résultat
id_etudiant | nom | prenom | moyenne | domicile |
---|---|---|---|---|
6 | Alarson | Marinah | 14 | Beaurepaire |
10 | Barose | Diane | 16 | Grenoble |
12 | Maillet | Serge | 13 | Lyon |
13 | Malaga | Rita | 15 | Grenoble |
Restriction sur un intervalle : BETWEEN
Traduite sous forme d'intervalle, la condition ci-dessus devient plus simple.
Ceci est possible avec le prédicat BETWEEN qui permet de vérifier qu'une valeur se trouve dans un intervalle. Voyons comment cela est simple dans l'exemple ci-dessous :
SELECT * FROM etudiant WHERE moyenne BETWEEN 13 AND 16
A côté, il y a aussi un autre prédicat : IN qui est pareil sauf qu'il permet de spécifier une liste de valeurs à la place de l'intervalle.
Comparaison de chaîne avec % et _
Jusqu' à présent nous avons manipulé des chiffres, mais de la même façon, on peut aussi opérer sur des chaînes de caractères. Des caractères appelés jokers seront utilisés afin de spécifier le critère. Les caractères en question sont :
- Le caractère % : Remplace une séquence de caractères (peut être nulle)
- Le caractère _ : Remplace un caractère
Exemple :
Pour avoir la liste des étudiants dont le nom se termine par un t on a :
Requête SQL
SELECT * FROM `etudiant` WHERE `nom` LIKE("%t")
Résultat
id_etudiant | nom | prenom | moyenne | domicile |
---|---|---|---|---|
9 | Maillet | Daniel | 18 | Lyon |
12 | Maillet | Serge | 13 | Lyon |
On peut aussi combiner les jokers, et on obtient par exemple la liste des étudiants qui ont un u en deuxième position dans leur nom (dUpon, sUza, dUchesse)
Requête SQL
SELECT * FROM `etudiant` WHERE `nom` LIKE("%_u%")
Requête SQL
id_etudiant | nom | prenom | moyenne | domicile |
---|---|---|---|---|
1 | Duchesse | Valérie | 17 | St Rambert |
5 | Suza | Alvaro | 19 | St Vallier |
8 | Dupon | Jean | 10 | Grenoble |