Cours SQL et MySQL · Module 2: Interroger les données (SELECT)
Tout ensemble - construire un rapport
Dans cette leçon7
Tu maîtrises maintenant tous les arts du scribe du catalogue. Il est temps de les réunir en un seul - un véritable rapport de bibliothèque qui sélectionne, nomme, trie et limite.
La commande du rapport
Le Conseil de la Bibliothèque se réunit demain et m'a envoyé un billet d'une seule phrase : « Les trois livres les plus chers, avec le titre et le prix sous des en-têtes soignés ». Nous allons transformer cette phrase en requête, couche par couche. Après chaque étape, tu verras ce qui a changé dans le résultat.
Étape 1 : les champs et le rayon
D'abord, nous choisissons les champs que demande le Conseil et nous indiquons le rayon d'où ils viennent :
1SELECT tytul, cena FROM ksiazki;Nous avons deux champs, mais les dix-sept parchemins, dans un ordre non fixé :
| tytul | cena |
|---|---|
| Iliada | 39.90 |
| Odyseja | 42.00 |
| Państwo | 55.50 |
| … | … |
Étape 2 : les en-têtes
Donnons maintenant aux champs des en-têtes soignés. Nous ajoutons des alias, le reste ne change pas :
1SELECT tytul AS Tytul, cena AS Cena FROM ksiazki;Seuls les en-têtes ont changé - les lignes sont les mêmes qu'à l'étape 1 :
| Tytul | Cena |
|---|---|
| Iliada | 39.90 |
| Odyseja | 42.00 |
| Państwo | 55.50 |
| … | … |
Étape 3 : le tri
« Les plus chers » signifie : du prix le plus élevé. Nous ajoutons ORDER BY avec la direction décroissante :
1SELECT tytul AS Tytul, cena AS Cena
2FROM ksiazki
3ORDER BY cena DESC;Il y a toujours dix-sept lignes, mais les plus chers sont maintenant en haut :
| Tytul | Cena |
|---|---|
| Elementy | 89.00 |
| Polityka | 61.20 |
| Etyka | 58.00 |
| Państwo | 55.50 |
| … | … |
Étape 4 : la limite
Le Conseil ne veut que trois livres : tout à la fin, nous coupons le reste.
1SELECT tytul AS Tytul, cena AS Cena
2FROM ksiazki
3ORDER BY cena DESC
4LIMIT 3;Voici le rapport terminé :
| Tytul | Cena |
|---|---|
| Elementy | 89.00 |
| Polityka | 61.20 |
| Etyka | 58.00 |
Lis-la ainsi : « Sélectionne le titre et le prix (avec de jolis en-têtes), depuis le rayon des livres, range du plus cher et montre-en seulement trois ». Les clauses suivent toujours l'ordre SELECT → FROM → ORDER BY → LIMIT.
Combiner les arts
Rien ne t'empêche de mélanger plusieurs techniques dans un seul parchemin. Voici la liste des pays pour le marchand de Rhodes - sans répétitions et, cette fois, à coup sûr par ordre alphabétique :
1SELECT DISTINCT kraj
2FROM autorzy
3ORDER BY kraj ASC;Ici, DISTINCT supprime les répétitions, et ORDER BY aligne les pays uniques par ordre alphabétique :
| kraj |
|---|
| Grecja |
| Polska |
| USA |
Quand tu utilises DISTINCT, MySQL pose une condition : tu ne peux trier que selon des champs de la liste SELECT. Avec les réglages par défaut, la requête SELECT DISTINCT kraj FROM autorzy ORDER BY nazwisko; se termine par une erreur. Après le tamisage, une seule ligne « Grecja » remplace cinq auteurs : impossible de savoir selon quel nom la placer.
Et voici un rapport de classement avec un alias, un tri et une limite :
1SELECT tytul, cena AS Cena
2FROM ksiazki
3ORDER BY cena ASC
4LIMIT 5;« Les cinq livres les moins chers, avec le prix sous un joli en-tête » :
| tytul | Cena |
|---|---|
| Ajaks | 18.50 |
| Antygona | 19.90 |
| Medea | 21.00 |
| Dziady | 24.50 |
| Hamlet | 27.00 |
On peut aussi trier selon l'alias : ORDER BY Cena ASC donne le même résultat, car MySQL y reconnaît l'alias du champ cena.
Le conseil du scribe
Construis la requête par couches : choisis d'abord les colonnes, indique ensuite le rayon, ajoute le tri, et enfin limite le nombre. Avant de cliquer sur « Vérifier la solution », passe en revue une courte liste de contrôle :
- L'ordre des clauses - SELECT → FROM → ORDER BY → LIMIT (→ OFFSET).
- Les virgules - oui entre les champs, non après le dernier champ avant FROM.
- La direction - ASC ou DESC à côté de chaque champ concerné.
- Les nombres - LIMIT dit combien afficher, OFFSET combien sauter.
- Les alias - la casse comme dans l'énoncé, et un alias avec une espace entre guillemets.
C'est ainsi que naissent des rapports clairs et précis. À toi de jouer maintenant !
Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Quel est le bon ordre des clauses dans une requête SELECT complète ?
2. Que va faire la requête « SELECT tytul AS Tytul, cena AS Cena FROM ksiazki ORDER BY cena DESC LIMIT 3; » ?
3. Qu'est-ce qui est FAUX à propos d'un alias créé avec le mot AS ?
4. Laquelle de ces compétences n'as-tu PAS apprise dans la Salle du Catalogue ?
Tâches pratiques dans le jeu
- Tri vertical
Ordonne les clauses d'un rapport complet dans le bon ordre où on les écrit en MySQL (de haut en bas) :
- Tri horizontal
Ordonne les éléments dans le bon ordre pour construire une requête sur les villes uniques des lecteurs (de gauche à droite) :
- Éditeur de code
Écris une requête qui récupère tytul et cena avec l'alias Cena de la table ksiazki, trie par prix croissant et affiche les 5 livres les moins chers.
- Clique dans l'ordre
Clique sur les éléments dans l'ordre où tu écrirais une requête pour les 5 livres les plus récents :
- Tri horizontal
Ordonne les éléments dans le bon ordre pour construire la fin de requête qui affiche la troisième page de 5 entrées (de gauche à droite) :
- Éditeur de code
Écris une requête qui récupère tytul avec l'alias Tytul et rok_wydania de la table ksiazki, trie par année de publication décroissante et affiche les 10 livres les plus récents.
- Tri vertical
Ordonne les clauses d'une requête pour la troisième page des livres les moins chers dans le bon ordre (de haut en bas) :
- Éditeur de code
Écris une requête qui récupère les valeurs uniques de la colonne kraj de la table autorzy et les trie par ordre croissant (alphabétique).