EN

Écrire du SQL · Chapitre 5

Premiers pas en SQL

7 min de lecture · 3 questions

Le SQL (Structured Query Language) est le langage qui permet d'interroger et de manipuler les bases de données relationnelles. Il a été créé au début des années 1970 chez IBM et reste, cinquante ans plus tard, le langage commun de tous les métiers de la data.

La requête

Une requête (query en anglais) est une instruction envoyée à la base de données. Elle décrit ce que tu veux obtenir, pas comment l'obtenir : c'est le SGBD qui se charge du reste.

SELECT ProductID, Category, SubCategory, Brand
FROM product

Cette requête affiche les colonnes ProductID, Category, SubCategory et Brand de la table product. Clique sur ▶ Exécuter pour voir le résultat.

  • SELECT indique les colonnes à afficher ;
  • FROM indique la table où elles se trouvent.

Les requêtes servent à répondre à des questions concrètes : quels sont les 5 produits les plus vendus l'an dernier ? Ont-ils gardé leur place par rapport à l'année précédente ? Quel chiffre d'affaires ont-ils rapporté ? À la fin de ce livre, tu sauras répondre à chacune de ces questions.

Les clauses

Une requête est composée de clauses : des mots-clés qui ont chacun un rôle précis. Dans les blocs de code, elles apparaissent en couleur. Nous en connaissons déjà deux, indispensables à toute requête de lecture : SELECT et FROM.

Plus la question est complexe, plus la requête utilisera de clauses : WHERE pour filtrer, GROUP BY pour regrouper, ORDER BY pour trier… Nous les verrons une par une.

Les données de ce chapitre

Les exemples des prochains chapitres utilisent la base controlGest, celle d'un grossiste en café. Il achète ses produits auprès des torréfacteurs et des fabricants, puis les revend aux enseignes (grande distribution, magasins de proximité, e-commerce, restauration).

Trois familles de tables suffisent pour commencer :

  • customer : les clients ;
  • product : les produits vendus ;
  • perform21 à perform26 : les ventes, une table par année de 2021 à 2026. Chaque ligne donne, pour un client, un produit et un mois, le volume vendu, le chiffre d'affaires, le coût et la marge.

Les blocs ci-dessous affichent les 3 premières lignes de chaque table.

La table customer

SELECT *
FROM customer
LIMIT 3
Colonne Signification
CustomerID Identifiant unique du client
CustomerName Nom du client
KeyAccount Commercial responsable du compte
StrategicCustomer Client stratégique (Yes ou No)
Channel, Country, City Canal de vente, pays et ville du siège
CreatedOn Date d'ouverture du compte
PaymentTermsDays Délai de paiement accordé, en jours

La table perform21

SELECT *
FROM perform21
LIMIT 3
Colonne Signification
CustomerID Le client (son identifiant dans customer)
ProductID Le produit (son identifiant dans product)
VolKilo (COPA) Volume vendu, en kilogrammes
NOS (COPA) Net Operating Sales : le chiffre d'affaires
COGS (COPA) Cost Of Goods Sold : le coût d'achat des produits vendus, en négatif
GP (COPA) Gross Profit : la marge brute, c'est-à-dire NOS + COGS
Year, Date L'année et le mois (le premier jour du mois)

La table product

SELECT *
FROM product
LIMIT 3
Colonne Signification
ProductID Identifiant unique du produit
Category, SubCategory Catégorie et sous-catégorie
Brand, Variety, Designation Marque, variété et désignation
LaunchDate, Status Date de lancement ; Active ou Discontinued (plus vendu)
PackWeightG, UnitsPerCase Poids d'un paquet (g) et nombre de paquets par carton
Intensity, Origin, IsOrganic Intensité du café (1 à 13), origine, bio ou non

La base contient d'autres tables (commerciaux, budgets, tarifs, promotions, calendrier) que nous utiliserons plus loin. Tu peux toutes les explorer avec le bouton Tables de la console.

Lire une requête pas à pas

Reprenons la première requête :

SELECT ProductID, Category, SubCategory, Brand
FROM product

Elle demande à la base d'afficher l'identifiant, la catégorie, la sous-catégorie et la marque de tous les produits de la table product. Elle comporte deux clauses.

SELECT

SELECT liste les colonnes à inclure dans le résultat, séparées par des virgules. Ici : ProductID, Category, SubCategory et Brand. Pour afficher toutes les colonnes sans les nommer, on écrit SELECT *.

FROM

FROM indique la table dans laquelle on lit les données, ici product.

Dans la console, tu peux écrire le nom de la table seul (product) ou le préfixer par le nom de sa base (controlGest.product). Les deux désignent la même table.

Les commentaires

Un commentaire est un texte que le SGBD ignore. Il sert à expliquer l'intention d'une requête à la personne qui la relira, y compris toi dans trois mois. Une ligne mise en commentaire n'est plus exécutée : c'est aussi un moyen pratique de désactiver une partie d'une requête pour tester.

Il existe deux façons d'écrire un commentaire :

Sur une ligne, avec deux tirets -- : tout ce qui suit sur la même ligne est ignoré.

-- Liste des produits avec leur catégorie et leur marque
SELECT ProductID, Category, SubCategory, Brand
FROM product

Sur plusieurs lignes, entre /* et */ :

/* Liste des produits avec leur catégorie et leur marque.
   Utilisée pour vérifier le référentiel produit. */
SELECT ProductID, Category, SubCategory, Brand
FROM product

Bien présenter une requête

Une requête se lit plus souvent qu'elle ne s'écrit. Quelques conventions la rendent lisible par toute l'équipe :

  • les mots-clés (SELECT, FROM…) en majuscules ;
  • une clause par ligne, chacune au début de sa ligne ;
  • les noms de tables et de colonnes écrits exactement comme dans la base.

Question 5.1

Affiche les colonnes CustomerID, CustomerName et StrategicCustomer de la table customer.

Ta réponse

-- Question 5.1 : écris ta requête ici
SELECT 
Voir la solution
SELECT CustomerID, CustomerName, StrategicCustomer
FROM customer

On liste les trois colonnes dans le SELECT, séparées par des virgules, et la table dans le FROM. Le résultat compte une ligne par client, soit 32 lignes. Les clients 17 et 18 n'ont ni nom ni statut : ce sont des valeurs manquantes (NULL), nous verrons comment les repérer au chapitre 7.

Question 5.2

Affiche le nom de chaque commercial (KeyAccount) et le nom des clients dont il s'occupe (CustomerName), à partir de la table customer.

Ta réponse

-- Question 5.2 : écris ta requête ici
SELECT 
Voir la solution
SELECT KeyAccount, CustomerName
FROM customer

L'ordre des colonnes dans le SELECT est l'ordre d'affichage : ici le commercial d'abord, le client ensuite.

Question 5.3

Affiche toutes les colonnes de la table key_account, qui décrit les commerciaux. Combien de personnes compte l'équipe commerciale ?

Ta réponse

-- Question 5.3 : écris ta requête ici
SELECT 
Voir la solution
SELECT *
FROM key_account

L'étoile * affiche toutes les colonnes. La console indique 9 lignes : l'équipe compte 9 personnes, dont Hélène, la directrice commerciale (sa colonne Manager est vide car elle n'a pas de responsable).