SQL, c’est quoi ? C’est un langage informatique pour manipuler des bases de données relationnelles : des tableaux avec des données classées dans différentes colonnes. SQL, c’est vraiment utile ? La réponse est (évidemment) oui pour les élèves en mathématiques appliquées : depuis la réforme des prépas ECG, SQL est au programme. Les questions SQL sont désormais fréquentes. On en retrouve par exemple dans le sujet Ecricome 2024 et dans de nombreux sujets aux oraux de HEC. Mais pas d’inquiétude, apprendre les quelques commandes centrales de SQL suffit pour tout comprendre !
Pour commencer : les bases du vocabulaire SQL
Voici une table (un tableau) en guise d’exemple, qu’on appelle ici Nations. Les données sont des arrondis des chiffres du FMI de 2023, ça peut toujours servir de les avoir en tête.
Pays | PIB | Population |
États-Unis | 27 000 | 340 000 000 |
Chine | 17 500 | 1 400 000 000 |
Allemagne | 4 500 | 83 000 000 |
Japon | 4 000 | 120 000 000 |
Inde | 3 500 | 1 400 000 000 |
Les colonnes de la table (Pays, PIB, Population) sont appelées attributs, les lignes sont appelées enregistrements. L’ensemble des valeurs possibles pour chaque attribut (pour chaque colonne) correspond au domaine de l’attribut. Il s’agit donc en quelque sorte du « type » de valeurs de chaque colonne. Il y a six domaines possibles pour les attributs : TEXT (les cellules de la colonne contiennent du texte), INT (des nombres entiers), FLOAT (des nombres décimaux), BOOLEAN (une condition du type Vrai/Faux), DATE (la date), NULL (des cases vides).
Par exemple, dans la table Nations, les données sont du type TEXT pour l’attribut « Pays » et du type INT pour les attributs « PIB » et « Population ».
L’ensemble des attributs d’une table est nommé descripteur de l’entité.
Sélectionner des données d’une table
Il s’agit d’une des questions SQL les plus fréquentes aux concours. Pourtant, rien de plus simple !
Sélectionner des attributs
Sélectionner des attributs (des colonnes), c’est réaliser une projection. Une projection, c’est indiquer deux choses :
- les attributs que l’on veut sélectionner ;
- la table (le tableau) qui contient tous ces attributs.
La commande est donc de la forme : SELECT attribut(s) FROM table.
Il est possible de sélectionner plusieurs attributs en les séparant par des virgules. On peut aussi sélectionner tous les attributs d’un tableau en indiquant : SELECT * FROM table.
Un exemple pour tout comprendre : on travaille ici à partir de la table Nations :
SELECT Pays, PIB FROM Nations;
La deuxième requête renvoie par exemple le tableau suivant :
Pays | PIB |
États-Unis | 27 000 |
Chine | 17 500 |
Allemagne | 4 500 |
Japon | 4 000 |
Inde | 3 500 |
Sélectionner des enregistrements (lignes)
On réalise alors une restriction. En plus de ne sélectionner que certaines colonnes avec la projection (ou choisir toutes les colonnes), on sélectionne des lignes bien précises. Comment faire ? C’est très simple : on précise après la projection une condition pour ne retenir que certaines lignes.
La commande est donc de la forme : SELECT attribut(s) FROM table WHERE condition.
Les conditions en SQL :
- On peut faire des conditions de type Vrai/Faux.
- On peut afficher seulement certaines lignes en fonction des valeurs renseignées, grâce aux opérateurs < , > , = , >= , …
- On peut choisir d’afficher les lignes qui ne vérifient pas une certaine condition, grâce à l’instruction NOT suivie de la condition.
- On peut combiner des conditions avec AND (les lignes doivent vérifier deux conditions), ou utiliser aussi OR (il faut vérifier au moins une des deux conditions).
Maintenant, un exemple ! On utilise toujours la table Nations :
SELECT Pays FROM Nations WHERE PIB > 10000;
La première requête renvoie par exemple le tableau suivant :
Pays |
États-Unis |
Chine |
Créer une table SQL et la remplir
Les requêtes pour créer une table
Pour commencer, il faut donner un nom à la table (rien de difficile donc). Puis, il faut préciser :
- les attributs (les colonnes) de la table ;
- le domaine de chaque attribut ;
- l’existence de clés primaires ou de clés étrangères dans la table.
Une clé primaire est un attribut (donc une colonne) qui permet d’identifier de façon unique chaque ligne de la table. Par exemple, dans la table Nations, l’attribut « Pays » est une clé primaire, car chaque pays a un nom différent. À l’inverse, l’attribut « PIB » ne peut pas jouer le rôle de clé primaire, car deux pays pourraient avoir le même PIB.
Une clé étrangère est un attribut qui renseigne la clé primaire d’une autre table. Cela permet de lier deux tables en une seule, dans le cadre d’une jointure (voir plus bas).
Pour indiquer que la colonne « attribut » est une clé étrangère en référence à l’attribut « attribut_table_externe » dans la table « table_externe », on utilise la commande suivante :
FOREIGN KEY (attribut) REFERENCES table_externe (attribut_table_externe)
Exemple : on veut créer une table qui recense les six entreprises mondiales avec la plus forte capitalisation boursière.
- Nom de la table : Capitalisations
- Les attributs : Entreprise, Pays (le pays d’origine de l’entreprise), Marché (où acheter les actions de ces entreprises), Capitalisation boursière (en milliards de dollars USD)
On procède alors comme ci-dessous :
Remplir sa table avec des données
Après la création de sa table, on utilise la commande INSERT, qui permet de remplir la table, selon le modèle suivant :
INSERT INTO table VALUES (valeur dans l’attribut 1, valeur dans l’attribut 2, …)
Exemple :
Attention, on met toujours des guillemets pour indiquer du texte.
On obtient finalement la table suivante :
Entreprise | Pays | Marché | Capitalisation boursière (milliards USD) |
Apple Inc. | États-Unis | NASDAQ | 3,463 |
Microsoft Corporation | États-Unis | NASDAQ | 3,181 |
NVIDIA Corporation | États-Unis | NASDAQ | 2,978 |
Alphabet Inc. | États-Unis | NASDAQ | 2,026 |
Amazon.com Inc. | États-Unis | NASDAQ | 1,973 |
SAUDI ARABIAN OIL CO. | Arabie saoudite | TADAWUL | 1,777 |
Modifier une table
Pour remplacer dans la colonne d’une table une valeur donnée par une autre, on utilise la commande :
UPDATE table SET attribut = la nouvelle valeur WHERE condition
Exemple : imaginons que Microsoft devienne une entreprise française, si on veut obtenir la table après cette modification, on écrit :
UPDATE Capitalisations SET Pays = “France” WHERE Entreprise = “NVDIA Corporation”
On peut aussi modifier plusieurs enregistrements en même temps. Par exemple, si la capitalisation de toutes les entreprises américaines diminuait de 1 milliard de dollars, on a :
UPDATE Capitalisations SET Capitalisation boursière = Capitalisation boursière – 1 WHERE Pays = “États-Unis”
Décrire une table SQL : le schéma relationnel
Pour décrire une table en une ligne, on écrit son schéma relationnel. Il s’agit du nom de la table et de liste des attributs de la table avec leur domaine respectif.
On utilise donc le modèle suivant :
Table = ((attribut 1 : domaine attribut 1), (attribut 2 : domaine attribut 2), … )
On doit de plus souligner les clés primaires, et mettre un dièse (#) devant une clé étrangère.
Par exemple, le schéma relationnel de la table Capitalisations est :
Capitalisations = ((Entreprise : TEXT), (#Pays : TEXT), (Marché : TEXT), (Capitalisation boursière : FLOAT))
Réaliser une jointure sur SQL
Structure de la jointure
Impossible de conclure cet article sans mentionner l’opération SQL au programme la plus complexe : la jointure. Mais ce n’est rien d’insurmontable si on s’y prend bien. Une jointure, c’est une opération qui consiste à réunir sur une même table des informations issues de deux tables différentes (table 1, table 2). En fait, réaliser une jointure, c’est comme créer une nouvelle table composée de certaines des colonnes des tables 1 et 2.
Il y a une condition très importante pour pouvoir réaliser une jointure : les tables 1 et 2 doivent avoir une colonne en commun. Donc, une des deux tables doit comporter une clé étrangère par rapport à l’autre table.
Ainsi, la structure de l’opération est la suivante :
SELECT table.attribut(s) FROM table 1 INNER JOIN table 2 ON table 1.colonne A = table 2.colonne B
On indique alors que l’on réalise une jointure à partir des tables 1 et 2, et on sélectionne les attributs que l’on souhaite dans ces deux tables (en indiquant la table, un point et l’attribut). La jointure est ici possible, car la colonne A de la table 1 est la même que la colonne B de la table 2. On peut aussi rajouter des conditions sur les lignes à sélectionner avec WHERE condition à la fin de la requête.
Exemple de jointure
Pas de panique, voici l’exemple.
On dispose de deux tables, Pays et Continents :
ID pays | Nom pays | ID continent |
1 | France | 1 |
2 | Allemagne | 1 |
3 | Brésil | 2 |
4 | Japon | 3 |
5 | Pérou | 2 |
6 | Chine | 3 |
ID continent | Nom continent |
1 | Europe |
2 | Amérique du Sud |
3 | Asie |
On souhaite obtenir une liste des pays avec le nom de leur continent (plutôt que leur ID, pas très lisible). On peut réaliser une jointure, car l’attribut « ID continent » est une clé primaire dans la table Continents, et c’est aussi une clé étrangère dans la table Pays. L’opération à réaliser est donc la suivante :
On obtient ainsi la table suivante :
Nom pays | Nom continent |
France | Europe |
Allemagne | Europe |
Brésil | Amérique du Sud |
Japon | Asie |
Pérou | Amérique du Sud |
Chine | Asie |
Conclusion
Les commandes SQL au programme ne sont pas nombreuses et les questions se ressemblent toutes beaucoup. Après avoir compris comment fonctionne SQL, il suffit donc de s’entraîner pour être sûr de performer sur ces questions aux concours. Pour cela, tu peux à présent consulter le méga répertoire des annales en maths appliquées, ou directement les annales des oraux de HEC pour les plus motivés !