Les cours du prof d'info
Les cours du prof d'info

Maîtriser SQL

🚀 SQL Express : La Cheat Sheet Ultime pour les Magiciens de la Base de Données ! 🧙‍♂️

Salut les jeunes geeks du futur ! Votre Prof préféré, le Dr. Data, est là pour vous guider dans le monde fascinant du SQL (prononcé “S-Q-L” ou “Sequel”, c’est comme vous voulez, tant que vous parlez la langue des bases de données !).

Le SQL, c’est le Structured Query Language. En gros, c’est le langage secret que vous utilisez pour parler à une base de données. Imaginez que la base de données est une immense bibliothèque super bien rangée avec des millions de livres (vos données). SQL, c’est votre guide vocal personnel qui sait exactement où trouver les infos, comment les trier et même faire des résumés !

Aujourd’hui, on va explorer les commandes SQL les plus importantes, comme des super-pouvoirs pour extraire l’information. Accrochez-vous, c’est parti pour le niveau supérieur !


📚 Nos Tables d’Exemple (Le Royaume du Pixel)

Pour que ce soit plus concret, on va imaginer qu’on gère la base de données d’un magasin de jeux vidéo, “Le Royaume du Pixel”. On a deux tables principales :

1. jeux (Les Infos sur nos jeux)

id_jeu titre genre prix stock id_editeur
1 Cyberpunk 2077 RPG 59.99 15 101
2 FIFA 24 Sport 69.99 30 102
3 Zelda: TotK Aventure 64.99 20 103
4 Mario Kart 8 Course 49.99 25 103
5 Assassin’s Creed Aventure 29.99 10 104
6 Stardew Valley Simulation 19.99 50 105
7 Elden Ring RPG 59.99 12 104
8 Among Us Party 9.99 100 106

2. editeurs (Les Infos sur les entreprises qui font les jeux)

id_editeur nom_editeur pays
101 CD Projekt Pologne
102 EA Sports USA
103 Nintendo Japon
104 Ubisoft France
105 ConcernedApe USA
106 Innersloth USA

✨ Les Commandes Essentielles : Votre Boîte à Outils SQL !

1. SELECT : Le “Quoi ?” 🧐

C’est la première chose que vous écrivez. Vous lui dites quelles colonnes (quelles informations) vous voulez voir.

  • SELECT * : Je veux TOUTES les colonnes. C’est le mode “donnez-moi tout ce que vous avez”.
  • SELECT colonne1, colonne2 : Je veux seulement ces colonnes spécifiques.

Exemple : Je veux voir les titres et les prix de tous les jeux.

SELECT titre, prix
FROM jeux;

Résultat :

titre prix
Cyberpunk 2077 59.99
FIFA 24 69.99
Zelda: TotK 64.99

2. FROM : Le “Où ?” 📍

Après SELECT, vous dites à SQL de quelle table vous voulez extraire les données. C’est comme pointer du doigt le bon rayon dans votre bibliothèque géante.

Exemple : Je veux toutes les informations, mais seulement de la table jeux.

SELECT *
FROM jeux;

Résultat : Toutes les colonnes et toutes les lignes de la table jeux.


3. WHERE : Le “Avec quelles conditions ?” 🤔 (Le filtre magique !)

C’est votre super-filtre ! Vous l’utilisez pour ne garder que les lignes (les enregistrements) qui remplissent une ou plusieurs conditions. C’est comme dire : “Donne-moi seulement les livres qui parlent de dragons ET qui ont plus de 300 pages.”

Opérateurs de comparaison courants :

  • = : Égal à
  • != ou <> : Différent de
  • > : Plus grand que
  • < : Plus petit que
  • >= : Plus grand ou égal à
  • <= : Plus petit ou égal à

Exemple simple : Je veux les jeux dont le prix est inférieur à 50€.

SELECT titre, prix
FROM jeux
WHERE prix < 50;

Résultat :

titre prix
Mario Kart 8 49.99
Assassin’s Creed 29.99
Stardew Valley 19.99
Among Us 9.99

Opérateur LIKE : Le détective des chaînes de caractères 🕵️‍♀️ Utilisé pour rechercher un modèle dans une colonne de texte.

  • % : Représente zéro, un ou plusieurs caractères inconnus.
  • _ : Représente un seul caractère inconnu.

Exemple avec LIKE : Je veux tous les jeux dont le titre contient “Mario”.

SELECT titre
FROM jeux
WHERE titre LIKE '%Mario%';

Résultat :

titre
Mario Kart 8

Opérateurs Logiques : AND, OR (Quand tu as plusieurs conditions)

  • AND : Toutes les conditions DOIVENT être vraies. (Condition1 ET Condition2)
  • OR : AU MOINS une des conditions DOIT être vraie. (Condition1 OU Condition2)

Exemple avec AND : Je veux les jeux de “Aventure” ET qui coûtent plus de 60€.

SELECT titre, genre, prix
FROM jeux
WHERE genre = 'Aventure' AND prix > 60;

Résultat :

titre genre prix
Zelda: TotK Aventure 64.99

Exemple avec OR : Je veux les jeux de “Sport” OU les jeux de “Party”.

SELECT titre, genre
FROM jeux
WHERE genre = 'Sport' OR genre = 'Party';

Résultat :

titre genre
FIFA 24 Sport
Among Us Party

4. ORDER BY : Le “Comment je les trie ?” 📋

Pour trier vos résultats, comme ranger votre collection de jeux par ordre alphabétique ou par prix.

  • ASC : Ordre Ascendant (A-Z, 0-9). C’est la valeur par défaut si vous ne précisez rien.
  • DESC : Ordre Descendant (Z-A, 9-0).

Exemple : Je veux tous les jeux, triés par prix du moins cher au plus cher.

SELECT titre, prix
FROM jeux
ORDER BY prix ASC; -- ou juste ORDER BY prix;

Résultat :

titre prix
Among Us 9.99
Stardew Valley 19.99
Assassin’s Creed 29.99

Exemple avec DESC : Je veux les jeux triés par stock, du plus grand stock au plus petit.

SELECT titre, stock
FROM jeux
ORDER BY stock DESC;

Résultat :

titre stock
Among Us 100
Stardew Valley 50
FIFA 24 30

5. LIMIT : Le “Combien je veux en voir ?” 🤏

Idéal si vous voulez seulement les “top X” ou les “premiers Y” résultats. C’est comme demander seulement les 5 premiers résultats de recherche Google.

Exemple : Je veux les 3 jeux les plus chers.

SELECT titre, prix
FROM jeux
ORDER BY prix DESC
LIMIT 3;

Résultat :

titre prix
FIFA 24 69.99
Zelda: TotK 64.99
Cyberpunk 2077 59.99

6. DISTINCT : Le “Pas de doublons, s’il vous plaît !” 🚫

Si vous voulez voir toutes les valeurs uniques d’une colonne. Par exemple, quels sont TOUS les genres de jeux disponibles, sans les répéter.

Exemple : Je veux la liste des genres de jeux disponibles.

SELECT DISTINCT genre
FROM jeux;

Résultat :

genre
RPG
Sport
Aventure
Course
Simulation
Party

7. AS : Le “Renommer pour que ce soit plus joli !” 🏷️

Utilisé pour donner un alias (un surnom) temporaire à une colonne ou une table. Super pratique pour rendre vos résultats plus lisibles ou pour simplifier des noms de colonnes compliqués.

Exemple : Affichez le titre du jeu et renommez la colonne prix en Prix_en_Euros.

SELECT titre, prix AS Prix_en_Euros
FROM jeux;

Résultat :

titre Prix_en_Euros
Cyberpunk 2077 59.99
FIFA 24 69.99

8. JOIN : Les “Mariages” de Tables ! 🤝

C’est là que ça devient super intéressant ! JOIN permet de combiner des lignes de deux ou plusieurs tables basées sur une colonne commune (souvent une clé étrangère). C’est comme quand vous assemblez les données d’un jeu avec celles de son éditeur pour avoir toutes les infos au même endroit.

L’ INNER JOIN (le plus courant) ne retourne que les lignes où il y a une correspondance dans les deux tables.

Exemple : Affichez le titre du jeu et le nom de son éditeur.

SELECT j.titre, e.nom_editeur
FROM jeux AS j -- On donne un alias 'j' à la table jeux pour simplifier
INNER JOIN editeurs AS e ON j.id_editeur = e.id_editeur;

Exemple décortiqué :

  • FROM jeux AS j: On commence par la table jeux, on l’appelle j pour faire court.
  • INNER JOIN editeurs AS e: On veut joindre la table editeurs, qu’on appelle e.
  • ON j.id_editeur = e.id_editeur: La magie opère ici ! On dit à SQL de lier les lignes des deux tables là où l’id_editeur est le même dans les deux tables.

Résultat :

titre nom_editeur
Cyberpunk 2077 CD Projekt
FIFA 24 EA Sports
Zelda: TotK Nintendo
Mario Kart 8 Nintendo
Assassin’s Creed Ubisoft
Stardew Valley ConcernedApe
Elden Ring Ubisoft
Among Us Innersloth

9. Fonctions d’Agrégation : Les “Calculatrices” de Groupes ! 🧮

Ces fonctions effectuent un calcul sur un ensemble de lignes et retournent une seule valeur. Parfait pour les statistiques !

  • COUNT() : Compte le nombre de lignes (ou de valeurs non nulles dans une colonne).
    • COUNT(*) : Compte toutes les lignes.
    • COUNT(colonne) : Compte les valeurs non nulles dans colonne.
  • SUM() : Calcule la somme des valeurs d’une colonne numérique.
  • AVG() : Calcule la moyenne des valeurs d’une colonne numérique.
  • MIN() : Trouve la valeur minimale d’une colonne.
  • MAX() : Trouve la valeur maximale d’une colonne.

Exemple COUNT : Combien y a-t-il de jeux dans notre magasin ?

SELECT COUNT(*) AS NombreDeJeux
FROM jeux;

Résultat :

NombreDeJeux
8

Exemple SUM et AVG : Quel est le stock total de tous les jeux, et quel est le prix moyen d’un jeu ?

SELECT SUM(stock) AS StockTotal, AVG(prix) AS PrixMoyen
FROM jeux;

Résultat :

StockTotal PrixMoyen
262 45.74875

GROUP BY (pour agréger par catégorie) Quand vous utilisez une fonction d’agrégation et que vous voulez appliquer ce calcul pour chaque catégorie d’une colonne. Exemple : Quel est le prix moyen par genre de jeu ?

SELECT genre, AVG(prix) AS PrixMoyenParGenre
FROM jeux
GROUP BY genre;

Résultat :

genre PrixMoyenParGenre
RPG 59.99
Sport 69.99
Aventure 47.49
Course 49.99
Simulation 19.99
Party 9.99

10. HAVING : Le “Filtrer les Groupes” 🤯 (Le WHERE des fonctions d’agrégation !)

Attention, petit piège de pro ici ! Vous utilisez WHERE pour filtrer les lignes avant le GROUP BY. Mais si vous voulez filtrer les résultats après qu’ils aient été regroupés et qu’un calcul d’agrégation a été fait, alors c’est HAVING qu’il vous faut !

Exemple : Quels sont les genres de jeux dont le prix moyen est supérieur à 50€ ?

SELECT genre, AVG(prix) AS PrixMoyenParGenre
FROM jeux
GROUP BY genre
HAVING AVG(prix) > 50;

Exemple décortiqué :

  1. SELECT genre, AVG(prix) AS PrixMoyenParGenre FROM jeux: On veut le genre et son prix moyen.
  2. GROUP BY genre: On calcule le prix moyen pour CHAQUE genre.
  3. HAVING AVG(prix) > 50: Puis, on filtre ces résultats groupés pour ne garder que ceux dont le PrixMoyenParGenre est supérieur à 50.

Résultat correct :

genre PrixMoyenParGenre
RPG 59.99
Sport 69.99

🏁 Bravo, vous êtes un Super-SQL-Héro !

Voilà, vous avez maintenant une boîte à outils SQL bien remplie ! N’oubliez pas : la meilleure façon d’apprendre, c’est de pratiquer. Essayez de créer vos propres requêtes, de jouer avec les données, et vous verrez, très vite, vous parlerez couramment le langage des bases de données.

Si vous avez des questions, mon badge de Professeur Data est toujours activé ! Keep querying, keep learning ! 😉


↵ retour vers: Support de cours

Pour accéder au contenu réservé aux enseignants, contactez david@goprof.be.