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

Résultat d'une requête SQL avec WHERE
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

Résultat d'une requête SQL avec WHERE et AND
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

Résultat d'une requête SQL avec WHERE et LIKE
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

Résultat d'une requête SQL avec WHERE, LIKE et un Joker
id_etudiant nom prenom moyenne domicile
1 Duchesse Valérie 17 St Rambert
5 Suza Alvaro 19 St Vallier
8 Dupon Jean 10 Grenoble

Recevez par email nos prochains conseils

Oseox sur Facebook Notifications via Facebook Oseox sur Twitter Notre actu sur twitter

Une question ? Venez la poser sur notre forum développement web !

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence Aseox.