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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Requête | une question posée à une base en SQL | |
| Clause | une partie d'une requête, ouverte par un mot réservé | WHERE |
| Condition | un test que chaque ligne réussit ou rate | prix < 30 |
| Résultat | les lignes que renvoie une requête | |
| Joker | un symbole qui remplace un texte quelconque | % |
| NULL | la 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
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfAffiché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
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
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
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
| Test | Signification | Exemple |
|---|---|---|
| = <> | Égal, différent | country = 'Spain' |
| < <= > >= | Plus petit, plus grand | price < 30 |
| BETWEEN | Dans un intervalle, bornes comprises | price BETWEEN 10 AND 12 |
| IN | Dans une liste de valeurs | country IN ('France', 'Spain') |
| LIKE | Correspond à un motif, % remplace tout texte | name LIKE '%Wooden%' |
| IS NULL | La valeur est manquante | category_id IS NULL |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un intervalle de prix
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
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
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
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
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
-- 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
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
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
| Étape | Clause | Ce que fait la base |
|---|---|---|
| 1 | FROM | Choisit la table |
| 2 | WHERE | Écarte les lignes qui ratent le test |
| 3 | SELECT | Garde les colonnes nommées |
| 4 | ORDER BY | Met les lignes en ordre |
| 5 | LIMIT | Coupe la liste à la taille demandée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À vous : les appareils par service
-- 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
-- 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.