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
| 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 comme WHERE | WHERE |
| Condition | un test que chaque ligne réussit ou rate | country = 'France' |
| 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. 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
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 clients de Lyon, en France
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
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
| Test | Ce qu'il fait | Exemple |
|---|---|---|
| = <> | Égal, différent | country = 'Spain' |
| < <= > >= | Plus petit, plus grand | joined_on >= '2024-01-01' |
| BETWEEN | Dans un intervalle, bornes comprises | joined_on BETWEEN '2024-01-01' AND '2024-06-30' |
| IN | Dans une liste de valeurs | city IN ('Lyon', 'Seville') |
| LIKE | Correspond à un motif | email LIKE 'omar.%' |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Les adresses qui commencent par omar
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
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
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
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
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
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
-- 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.