Niveau 2 : Filtrer les lignes avec WHERE

Niveau 2 : Filtrer les lignes avec WHERE

Mis à jour le

Débutant · niveau 2 sur 20. Objectif : Ne garder que les lignes qui respectent une condition.

Notions : WHERE = <> < > <= >=

Leçon

Une table contient souvent beaucoup plus de lignes que ce qui t'intéresse. WHERE sert à filtrer : il se place après FROM et ne garde que les lignes pour lesquelles la condition est vraie. Les autres disparaissent du résultat, mais restent bien sûr dans la table.

Une condition est une comparaison. On compare une colonne à une valeur avec = (égal), <> (différent), < (inférieur), > (supérieur), <= (inférieur ou égal) et >= (supérieur ou égal). « Au moins 47000 » s'écrit >= 47000, « plus de 47000 » s'écrit > 47000 : la nuance change le résultat dès qu'une valeur vaut exactement 47000.

Un texte s'écrit entre apostrophes simples : 'Drama'. Sans apostrophes, SQL croit que Drama est un nom de colonne. Un nombre s'écrit sans apostrophes : 2018. Avec =, la comparaison de textes respecte les majuscules : 'drama' n'est pas égal à 'Drama'.

On peut aussi comparer deux colonnes de la même ligne : WHERE seats_sold < capacity garde les vols qui ne sont pas pleins. Ou comparer le résultat d'un calcul : WHERE capacity - seats_sold > 40.

Un point essentiel pour la suite : SQL n'exécute pas la requête dans l'ordre où on l'écrit. Il prend d'abord la table (FROM), puis filtre les lignes (WHERE), et seulement ensuite fabrique les colonnes demandées (SELECT). Cet ordre d'exécution explique beaucoup de règles que tu rencontreras plus loin. Par exemple, un alias créé dans le SELECT n'existe pas encore au moment du WHERE : en SQL standard, on réécrit donc le calcul dans le WHERE.

Syntaxe

SELECT colonnes
FROM ma_table
WHERE colonne >= valeur;

Exemple commenté

SELECT title, genre
FROM movies
WHERE genre = 'Drama';

Seuls les films dont le genre vaut exactement 'Drama' sont gardés.

Table movies (10 lignes)
idtitlegenreyeardurationratingdirector_id
1Night TrainThriller20151187.81
2Blue HarborDrama20181027.12
3Paper Moon CityComedy2012956.45
4Silent PeakDrama20201318.23
5Last SignalSci-Fi20191427.51
6Summer KeysComedy2016885.94
7Iron GardenSci-Fi202112583
8Dust and GoldWestern20141106.82
9The Quiet HourDrama2022977.45
10Deep CurrentThriller20171056.9NULL

Résultat de l’exemple

titlegenre
Blue HarborDrama
Silent PeakDrama
The Quiet HourDrama

À retenir

  • WHERE vient toujours après FROM.
  • Texte entre apostrophes, nombre sans apostrophes.
  • <> veut dire « différent de ».

Pièges fréquents

  • Écrire WHERE genre = Drama sans apostrophes : SQL cherche alors une colonne nommée Drama.
  • Confondre > et >= : « au moins 47000 » s'écrit >= 47000.

Spécificité SQLite

SQLite accepte un alias du SELECT dans le WHERE : WHERE empty_seats > 40 fonctionne. PostgreSQL, SQL Server ou Oracle le refusent. Prends l'habitude portable : réécris le calcul dans le WHERE.

Autre différence : avec =, SQLite compare les textes en respectant les majuscules (collation BINARY). MySQL, avec sa collation par défaut, les ignore : 'drama' = 'Drama' y est vrai.

Les 5 exercices du niveau

  1. Guidé · Affiche le titre des films de genre 'Comedy'. (Table : movies)
  2. Entraînement · Affiche le titre et l'année des films sortis après 2018 (2018 exclue). (Table : movies)
  3. Entraînement · Affiche le nom et le salaire des employés qui gagnent au moins 47000. (Table : staff)
  4. Entraînement · Affiche le nom et le service des employés qui ne travaillent pas dans le service 'IT'. (Table : staff)
  5. Défi · Affiche la compagnie, le départ, l'arrivée et le nombre de places vides (empty_seats) des vols qui ont plus de 40 places vides. (Table : flights)

Dans SpeedQL, chaque requête est corrigée tout de suite : le résultat est comparé à celui attendu, puis la requête est relancée sur une base de contrôle cachée. Chaque exercice a ses indices écrits, à afficher seulement si tu bloques.

Voir aussi : la fiche de l’aide-mémoire · les exercices SQL corrigés sur cette notion

Faire les exercices du niveau 2

Gratuit, sans inscription : la leçon et les 5 exercices s’ouvrent directement dans ton navigateur.

Ouvrir le niveau 2 dans SpeedQL

·