CodeGym /Cours /SQL SELF /Création de requêtes simples avec SELECT, WHERE et ORDER ...

Création de requêtes simples avec SELECT, WHERE et ORDER BY

SQL SELF
Niveau 3 , Leçon 2
Disponible

Il est temps maintenant de tout rassembler et d’apprendre à faire des requêtes simples mais utiles en combinant SELECT, WHERE et ORDER BY. Cette compétence va te servir pour plein de trucs, genre récupérer des listes d’utilisateurs ou faire des petits rapports.

Avant de commencer, petit rappel sur la structure d’une requête SQL basique :

SELECT colonne1, colonne2, colonne3
FROM table
WHERE condition
ORDER BY colonne ASC
LIMIT nombre_de_lignes
OFFSET nombre_de_lignes;

Si SQL était un roman, SELECT serait le titre du chapitre, FROM son contenu, et WHERE l’explication de l’intrigue. Et ORDER BY rajoute un peu d’ordre, histoire que ce soit plus sympa à lire !

L’ordre des opérateurs est strict. Tu peux en zapper certains (ne pas les écrire), mais tu ne peux pas changer leur ordre.

Exemple 1 : Sélectionner les noms des étudiants avec d’excellentes notes

Imaginons qu’on a une table students avec cette structure et ces données :

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Tu dois récupérer la liste de tous les étudiants qui ont une super note (donc grade = 'A'), triée par nom. Voilà comment on fait :

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Résultat :

name
Alex
Otto

Explication :

  1. SELECT name — on ne prend que le nom. Pas la peine de gaspiller des ressources à sortir des données inutiles.
  2. WHERE grade = 'A' — on filtre pour ne garder que ceux qui ont la meilleure note.
  3. ORDER BY name ASC — on trie les noms des étudiants par ordre alphabétique.

Exemple 2 : Chercher des produits par prix

Maintenant, imaginons qu’on a une table products avec des infos sur les produits :

id product_name category price
1 Smartphone Electronics 30000
2 Téléviseur Electronics 45000
3 Réfrigérateur Appliances 50000
4 Aspirateur Appliances 15000
5 Ampoule Lighting 500

Notre but — avoir la liste des produits de la catégorie "Electronics", triés par prix décroissant. La requête ressemble à ça :

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Résultat :

product_name price
Téléviseur 45000
Smartphone 30000

Explication :

  1. SELECT product_name, price — on prend le nom du produit et son prix.
  2. WHERE category = 'Electronics' — on filtre pour ne garder que les produits de la catégorie "Electronics".
  3. ORDER BY price DESC — on trie les résultats par prix décroissant (le plus cher en premier).

Exemple 3 : Filtres complexes avec logique

On reprend la même table students. Disons qu’on veut trouver tous les étudiants de plus de 21 ans qui ont une note B ou C, et les trier par âge. Là, on combine plusieurs conditions :

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Résultat :

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

Explication :

  1. WHERE age > 21 — on ne garde que les étudiants de plus de 21 ans.
  2. AND (grade = 'B' OR grade = 'C') — on filtre ceux qui ont la note B ou C. Les parenthèses servent à grouper les conditions.
  3. ORDER BY age ASC — on trie le résultat par âge, du plus jeune au plus vieux.

Exemple 4 : Combiner tri et filtrage

On retourne à la table products. On veut trouver les produits à moins de 50 000, les trier par catégorie, et à l’intérieur de chaque catégorie — par prix (du moins cher au plus cher).

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Résultat :

product_name category price
Aspirateur Appliances 15000
Smartphone Electronics 30000
Téléviseur Electronics 45000
Ampoule Lighting 500

Explication :

  1. WHERE price < 50000 — d’abord on filtre les produits, on garde juste ceux à moins de 50 000.
  2. ORDER BY category ASC, price ASC — on trie par catégorie (ordre alphabétique), et à l’intérieur de chaque catégorie, par prix croissant.

Exemple 5 : Erreur fréquente — oublier de grouper les conditions

Voyons maintenant ce qui peut mal tourner. Et si on oublie de mettre des parenthèses pour grouper les conditions logiques ?

Requête incorrecte :

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Ici, OR grade = 'C' va s’exécuter sans tenir compte du AND age > 21, et la requête va renvoyer un résultat inattendu. On va avoir tous ceux qui ont la note C, même s’ils ont moins de 21 ans.

C’est pour ça qu’il faut toujours utiliser des parenthèses pour que ce soit clair :

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION