Cours SQL et MySQL · Module 2: Interroger les données (SELECT)

Choisir les colonnes - seulement ce dont tu as besoin

4 min de lecture
Dans cette leçon5

À l'entrée de la Bibliothèque, les lecteurs demandent toujours la même chose : quels livres avons-nous et combien coûte une copie. Je veux afficher une liste de prix près de la porte. Mais le rayon ksiazki a sept champs, et il ne m'en faut que deux : le titre et le prix.

Dans le lieu de la Porte, tu as rencontré l'astérisque *. Il est pratique, mais il ramène tous les champs - y compris ceux dont tu n'as pas besoin.

SELECT * - le rayon tout entier

Commençons par ce que tu connais déjà. L'astérisque après SELECT signifie : « donne-moi tous les champs de ce rayon ».

1SELECT * FROM ksiazki;

La Bibliothèque renvoie tous les champs : id, tytul, autor_id, kategoria_id, rok_wydania, cena, dostepna. Voici les trois premiers parchemins de la réponse :

idtytulautor_idkategoria_idrok_wydaniacenadostepna
1Iliada11199039.901
2Odyseja11199042.001
3Państwo22200155.500
…………………

Pour une liste de prix, c'est trop - comme demander au scribe une armoire entière quand il te faut une seule fiche. Le lecteur se moque de autor_id et de kategoria_id.

Colonnes sélectionnées - économie et ordre

Si, au lieu de l'astérisque, tu nommes les champs séparés par des virgules, tu obtiens exactement ce que tu veux :

1SELECT tytul, cena FROM ksiazki;

Cela signifie : « Montre-moi le titre et le prix de chaque livre - rien de plus ». Les trois mêmes premiers parchemins ressemblent maintenant à ceci :

tytulcena
Iliada39.90
Odyseja42.00
Państwo55.50
……

Regarde ce qui a changé et ce qui n'a pas changé. Il y a toujours dix-sept lignes - chaque livre du rayon a sa ligne dans la réponse. Seules les colonnes ont diminué : sur sept, il en reste deux. La liste des colonnes après SELECT ne supprime aucun parchemin, elle choisit seulement des champs.

Pourquoi choisir des colonnes précises ?

  • Lisibilité - le résultat ne contient que les champs pertinents.
  • Rapidité - la Bibliothèque ne transporte pas de données inutiles.
  • Contrôle - tu décides de l'ordre des champs dans la réponse.

L'ordre des colonnes

L'ordre des colonnes dans le résultat suit l'ordre de la liste SELECT, et non l'ordre des champs sur le rayon. Inversons le titre et le prix :

1SELECT cena, tytul FROM ksiazki;

Ici, le prix apparaît avant le titre :

cenatytul
39.90Iliada
42.00Odyseja
55.50Państwo
……

Les données sont les mêmes, seule la disposition de la réponse a changé. Tu peux nommer autant de champs que tu veux - deux, trois, davantage - tant qu'ils sont séparés par des virgules :

1SELECT tytul, cena, rok_wydania FROM ksiazki;

Les trois champs suivent l'ordre de la liste :

tytulcenarok_wydania
Iliada39.901990
Odyseja42.001990
Państwo55.502001
………

Les erreurs courantes

Une liste de colonnes a l'air innocente, mais on s'y trompe facilement. Voici les trois erreurs les plus fréquentes :

  • Une virgule oubliée. SELECT tytul cena FROM ksiazki; ne signale aucune erreur. MySQL prend le mot cena pour un nouveau nom du champ tytul et affiche une colonne au lieu de deux. Ce mécanisme s'appelle un alias - tu le verras dans la leçon suivante.
  • Une virgule avant FROM. Dans SELECT tytul, cena, FROM ksiazki;, une virgule suit le dernier champ. MySQL attend un autre nom et signale une erreur de syntaxe.
  • Les lettres polonaises. Le champ s'appelle tytul, et non tytuł. Pour MySQL, « ł » et « l » sont des caractères différents : il ne trouvera pas de champ tytuł et signalera une erreur.

Mon conseil : dans les rapports et les listes de prix, nomme toujours les champs précis. L'astérisque renvoie aussi les champs que quelqu'un ajoutera au rayon dans un an, et ta liste de prix se retrouvera avec des colonnes que personne n'a demandées.

Réserve l'astérisque à un coup d'œil exploratoire sur un rayon inconnu. Au quotidien, choisis tes champs avec discernement, et la réponse aura exactement les colonnes que demande le lecteur.

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. 1. En quoi le résultat de « SELECT * FROM ksiazki; » diffère-t-il de celui de « SELECT tytul, cena FROM ksiazki; » ?

  2. 2. Qu'est-ce qui détermine l'ordre des colonnes dans la réponse à la requête « SELECT cena, tytul FROM ksiazki; » ?

  3. 3. Quand vaut-il mieux, au quotidien, nommer des colonnes précises plutôt que d'utiliser l'astérisque * ?

Tâches pratiques dans le jeu

  • Éditeur de code

    Écris une requête qui récupère de la table ksiazki seulement deux colonnes : tytul et cena.

  • Tri horizontal

    Ordonne les éléments dans le bon ordre pour construire une requête qui récupère le titre et le prix des livres (de gauche à droite) :

  • Éditeur de code

    Écris une requête qui récupère de la table ksiazki trois colonnes : tytul, cena et rok_wydania.