Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Demander les lignes utiles

Après cette leçon: Je peux demander à une base de données les lignes dont j'ai besoin.

Leçon de 55 min11 commandesLab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Quels articles sont en rupture ?

Le responsable d'une boutique en ligne pose une question simple. Quels articles n'ont plus de stock, et à quel prix se vendent-ils ?

Dans un tableur, vous feriez défiler des centaines de lignes. Une base répond en un instant.

Il suffit de poser la question sous une forme qu'elle comprend.

À la fin de cette leçon

Remarque

Je peux demander à une base de données les lignes dont j'ai besoin.

Mots clés

MotCe que ça veut direExemple
Requêteune question posée à une base en SQL
Clauseune partie d'une requête, ouverte par un mot réservéWHERE
Conditionun test que chaque ligne réussit ou rateprix < 30
Résultatles lignes que renvoie une requête
Jokerun symbole qui remplace un texte quelconque%
NULLla marque d'une valeur manquante

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

WHERE garde les lignes qui réussissent

Une requête commence par SELECT, qui nomme les colonnes voulues. FROM nomme la table.

WHERE ajoute une condition. Une ligne reste dans le résultat seulement si elle la réussit. Reliez les conditions avec AND et OR.

Le texte se met entre apostrophes. Les nombres, non.

Lancez d'abord les deux Runs de départ. Vous les connaissez déjà : les répéter ne coûte rien.

Accepter le certificat du serveur

Commande
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour la boutique

Commande
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les articles en rupture

Commande
sql "SELECT name, price FROM products WHERE stock = 0 ORDER BY name"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Deux conditions ensemble

Commande
sql "SELECT name, stock FROM products WHERE stock < 10 AND discontinued = 0 ORDER BY stock, name"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : les tests possibles

TestSignificationExemple
= <>Égal, différentcountry = 'Spain'
< <= > >=Plus petit, plus grandprice < 30
BETWEENDans un intervalle, bornes comprisesprice BETWEEN 10 AND 12
INDans une liste de valeurscountry IN ('France', 'Spain')
LIKECorrespond à un motif, % remplace tout textename LIKE '%Wooden%'
IS NULLLa valeur est manquantecategory_id IS NULL

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un intervalle de prix

Commande
sql "SELECT name, price FROM products WHERE price BETWEEN 10 AND 12 ORDER BY price, name"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Chercher avec un motif

Commande
sql "SELECT name FROM products WHERE name LIKE '%Wooden%' ORDER BY name"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une liste de pays

Commande
sql "SELECT name, city FROM suppliers WHERE country IN ('France', 'Spain') ORDER BY name"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

NULL veut dire manquant, pas zéro

Certains articles n'ont aucune catégorie. La colonne contient NULL : une marque qui dit que rien n'est connu.

NULL n'est égal à rien, pas même à NULL. Donc = NULL ne trouve jamais de ligne.

Posez la question avec IS NULL. Lancez les deux Runs et comparez.

Compter les articles sans catégorie

Commande
sql "SELECT COUNT(*) AS n FROM products WHERE category_id IS NULL"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

La même question, mal écrite

Commande
sql "SELECT COUNT(*) AS n FROM products WHERE category_id = NULL"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que category_id = NULL trouve les valeurs manquantes. Il n'en trouve aucune, et la base ne prévient pas. Une valeur manquante n'est égale à rien. Écrivez toujours IS NULL ou IS NOT NULL.

À vous : les appareils sans responsable

Code: sql
-- Les appareils qui n'ont aucun responsable.
SELECT code, modele FROM appareils
WHERE responsable IS NULL;
-- Écrivez maintenant responsable = NULL et comparez : que voyez-vous ?

ORDER BY et LIMIT façonnent le résultat

Une table n'a aucun ordre fixe. Si l'ordre compte, dites-le avec ORDER BY. DESC met le plus grand en premier.

LIMIT 3 garde les trois premières lignes du résultat. OFFSET 3 en saute trois avant.

Utilisez LIMIT avec ORDER BY. Sans ordre, « les trois premières » ne veut rien dire.

Les trois articles les plus chers

Commande
sql "SELECT name, price FROM products ORDER BY price DESC LIMIT 3"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Sauter trois lignes, en prendre deux

Commande
sql "SELECT name, price FROM products ORDER BY price DESC LIMIT 2 OFFSET 3"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : comment lire une requête

ÉtapeClauseCe que fait la base
1FROMChoisit la table
2WHEREÉcarte les lignes qui ratent le test
3SELECTGarde les colonnes nommées
4ORDER BYMet les lignes en ordre
5LIMITCoupe la liste à la taille demandée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À vous : les appareils par service

Code: sql
-- Les appareils des services Juridique ou Ventes.
SELECT code, modele, service FROM appareils
WHERE service = 'Juridique' OR service = 'Ventes';
-- Modifiez la condition pour trouver les appareils achetés en 2024 ou après.

À vous : les appareils les plus chers

Code: sql
-- Les trois appareils les plus chers, le plus cher d'abord.
SELECT code, prix FROM appareils
ORDER BY prix DESC
LIMIT 3;
-- Remplacez DESC par ASC et relancez.

Pour aller plus loin

Un site affiche les articles par pages de cinq, du moins cher au plus cher. Écrivez la requête de la page trois avec LIMIT et OFFSET.

Deux articles de la boutique coûtent 19,99 €. Expliquez pourquoi ORDER BY price seul peut les montrer dans un ordre différent d'une fois à l'autre. Ajoutez une seconde colonne de tri pour l'empêcher.

À propos de ce labo et de sa source: Lab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.