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

Trouver des données avec SELECT et WHERE

Après cette leçon: Je peux trouver les lignes d'une table qui répondent à une condition.

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

Trois livres parmi trois mille

SELECT et WHERE sont les deux mots SQL qui demandent à une base de données seulement les lignes dont tu as besoin.

Sans eux, tu lirais trois mille lignes à la main pour trouver trois romans policiers récents. Une base les trouve en un instant, si tu poses la question dans sa langue.

À la fin de cette leçon

Remarque

Je peux trouver les lignes d'une table qui répondent à une condition.

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 comme WHEREWHERE
Conditionun test que chaque ligne réussit ou ratecountry = 'France'
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. Relie deux conditions avec AND (les deux) ou OR (l'une des deux).

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

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut et attends que la machine soit prête. Les deux Runs suivants servent à te connecter. Le deuxième crée un alias : un nom court, sql, pour une longue commande.

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 clients de Lyon, en France

Commande
sql "SELECT first_name, last_name, city FROM customers WHERE country = 'France' AND city = 'Lyon' ORDER BY last_name, first_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.

Irlande ou Lyon : l'une des deux conditions

Commande
sql "SELECT first_name, last_name, city FROM customers WHERE country = 'Ireland' OR city = 'Lyon' ORDER BY last_name, first_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.

Des tests plus courts avec LIKE et IN

LIKE cherche un motif. Le joker % remplace n'importe quel texte, même vide.

BETWEEN garde un intervalle, bornes comprises. IN garde les valeurs d'une liste.

Chacun remplace une longue chaîne de AND et de OR.

Exemple : les tests possibles

TestCe qu'il faitExemple
= <>Égal, différentcountry = 'Spain'
< <= > >=Plus petit, plus grandjoined_on >= '2024-01-01'
BETWEENDans un intervalle, bornes comprisesjoined_on BETWEEN '2024-01-01' AND '2024-06-30'
INDans une liste de valeurscity IN ('Lyon', 'Seville')
LIKECorrespond à un motifemail LIKE 'omar.%'

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

Les adresses qui commencent par omar

Commande
sql "SELECT first_name, last_name FROM customers WHERE email LIKE 'omar.%' ORDER BY last_name, id"

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 inscrits du premier semestre 2024

Commande
sql "SELECT first_name, last_name, joined_on FROM customers WHERE joined_on BETWEEN '2024-01-01' AND '2024-06-30' ORDER BY joined_on, id"

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.

Trois villes dans une liste

Commande
sql "SELECT first_name, last_name, city FROM customers WHERE city IN ('Lyon', 'Seville', 'Dublin') ORDER BY city, last_name, first_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 clients n'ont donné aucun numéro de téléphone. 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.

Pose la question avec IS NULL. Lance les deux Runs et compare.

Les clients français sans téléphone

Commande
sql "SELECT first_name, last_name FROM customers WHERE phone IS NULL AND country = 'France' ORDER BY last_name, first_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.

La même question, mal écrite

Commande
sql "SELECT first_name, last_name FROM customers WHERE phone = NULL AND country = 'France'"

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 phone = NULL trouve les valeurs manquantes. Il n'en trouve aucune, et la base ne prévient pas. Une valeur manquante n'est égale à rien. Écris toujours IS NULL ou IS NOT NULL.

ORDER BY et LIMIT façonnent le résultat

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

LIMIT 3 garde les trois premières lignes du résultat. Utilise LIMIT avec ORDER BY : sans ordre, « les trois premières » ne veut rien dire.

Les trois inscrits les plus récents

Commande
sql "SELECT first_name, last_name, joined_on FROM customers ORDER BY joined_on DESC, id 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.

À toi : les livres de science-fiction

Code: sql
-- Les livres de science-fiction, du plus ancien au plus récent.
SELECT titre, annee FROM livres
WHERE genre = 'Science-fiction'
ORDER BY annee;
-- Change la condition pour trouver les livres parus avant 1950.

À 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.