Les bases de données, sans brouillard

Ta première requête utile

21 min
What you'll learn
  • écrire des requêtes avec une liste explicite de colonnes après SELECT et un filtre de lignes avec WHERE
  • traduire une question métier en SQL selon l'itinéraire : entité → FROM, contraintes → WHERE (avec AND), sortie → SELECT, ordre → ORDER BY
  • expliquer pourquoi SELECT * est une mauvaise pratique dans les requêtes de
  • vérifier une requête en la reformulant à voix haute : si ta reformulation correspond à la question de départ, la requête est juste sur le fond

La carte est étudiée — et QUERY change les règles. Jusqu'ici, tu contemplais toute l'archive en touriste ; un archiviste travaille autrement. Sur l'holopanneau, tout s'éteint sauf une table, et une consigne apparaît : pose ta question de sorte que la réponse ne contienne pas une seule ligne de trop, ni une seule colonne inutile.

On choisit les colonnes et les lignes utiles

Tout prendre avec * est pratique pour une première rencontre, mais dans le vrai travail, c'est comme amener tout l'entrepôt à la caisse. En général, il te faut des champs précis : énumère-les, séparés par des virgules, après SELECT.

Pour les lignes, même principe : au lieu de prendre toute la vitrine, sélectionne uniquement le segment voulu avec WHERE. Par exemple, demandons à « Kotomarket » uniquement les produits de la catégorie Livres :

Un cadet resserre une vitrine holographique avec un faisceau-filtre ambré : seules quelques lignes en capsules correspondant aux livres traversent le faisceau
Une question précise à l'archive : SELECT nomme les colonnes voulues, WHERE ne laisse passer que les lignes utiles.

Choosing the columns and rows you need

Grabbing everything with * is convenient for a first look, but in real work it’s like hauling the entire warehouse up to the checkout. Usually you need specific fields: list them, comma-separated, after SELECT.

It’s the same with rows: instead of the whole storefront, pick only the segment you need via WHERE. For example, let’s ask Kotomarket for only the products in the Books category:

Quels livres sont en vitrine, et combien ils coûtent :
Query result
nameprice
SQL для профи1290.00
Чистый код1490.00
Алгоритмы на практике1690.00

De la question métier à la requête

Les vraies questions n'arrivent pas à l'archiviste en SQL : « quels livres coûtent moins de mille cinq cents ? », « qu'est-ce qui, en électronique, coûte plus de 5000 ? ». La traduction suit toujours le même itinéraire :

  1. Entité → table. De quoi parle la question : de produits, d'acheteurs, de commandes ? « Les livres à moins de 1500 », c'est une question sur les produits, donc FROM products.
  2. Contraintes → WHERE. Chaque condition de la question devient une condition de filtre distincte : la catégorie « Livres », le prix inférieur à 1500.
  3. Quoi montrer → SELECT. Que veut voir la personne dans la réponse ? Le nom et le prix — c'est ce que nous énumérons, le reste est du bruit.
  4. Forme de la réponse → ORDER BY. « Du moins cher au plus cher » — un tri par prix.
-- « Quels livres coûtent moins de 1500 et combien, du moins cher au plus cher ? »
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;

Plusieurs conditions se relient par le mot AND — nous détaillerons les opérateurs de filtre au chapitre suivant.

Dernier réflexe du bon archiviste : lis la requête terminée à voix haute, comme une phrase. « Parmi les produits, prendre les livres à moins de 1500, montrer le nom et le prix, trier par prix » — si ta reformulation correspond à la question de départ, la requête est juste sur le fond. Si « toutes les colonnes » ou « toute la vitrine » réapparaît dans ta reformulation, reviens en arrière et resserre.

Interview question

Question d'entretien : pourquoi SELECT * est-il considéré comme une mauvaise pratique dans les requêtes de ?

Bonne réponse : d'abord, il ramène des données superflues : le réseau et la mémoire sont gaspillés sur des colonnes inutiles, et la base perd parfois la possibilité de répondre uniquement à partir de l'index (un index-only scan ; les index, c'est le Chapitre 10). Ensuite, c'est fragile : lorsqu'on ajoute ou renomme des colonnes, les rapports et le code qui comptent sur l'ensemble et l'ordre des colonnes peuvent casser. Une liste explicite de colonnes est le contrat de la requête ; SELECT * doit rester réservé à l'exploration interactive des données.

Check yourself
Que renverra la requête SELECT name FROM products WHERE category = 'Книги' ?

The index has been read: you know what’s in the five tables and which threads stitch them together. QUERY dims the map, and the next clearance level lights up on the holopanel — the reading terminal.

QUERY: Remember the cardinal property of this place: the archive answers only well-formed questions. From the next clearance on, we learn to ask precisely.