Pourquoi le SQL est essentiel en NSI ?
Si tu suis la spécialité Numérique et Sciences Informatiques (NSI), tu vas forcément croiser la route des bases de données. Derrière presque toutes les applications que tu utilises (réseaux sociaux, sites de e-commerce, applications bancaires) se cache une base de données bien organisée. Le SQL (Structured Query Language) est le langage universel pour communiquer avec elles. C'est comme la clé qui te permet d'aller chercher, d'ajouter, de modifier ou de supprimer l'information stockée. En NSI, tu dois savoir le manipuler pour tes projets et pour l'épreuve finale. Ne t'inquiète pas, on commence par les bases : SELECT, WHERE et JOIN sont les trois piliers sur lesquels tout repose.
La requête SELECT : ton premier pas en SQL
La commande SELECT est la plus fondamentale. Elle te permet de sélectionner des données dans une table. Imagine une table "Élèves" avec des colonnes comme `id`, `nom`, `prenom`, `classe`. Pour voir tous les noms et prénoms, tu écrirais :
SELECT nom, prenom FROM Élèves;
Le mot-clé FROM indique dans quelle table chercher. Si tu veux absolument toutes les colonnes, tu peux utiliser l'astérisque (*) :
SELECT * FROM Élèves;
C'est pratique pour explorer une table, mais dans un vrai projet, il vaut mieux préciser les colonnes dont tu as besoin pour des raisons de performance et de clarté.
Ordonner et limiter les résultats
Les résultats d'un SELECT peuvent être triés avec ORDER BY. Par exemple, pour avoir les élèves classés par nom, puis par prénom :
SELECT nom, prenom FROM Élèves ORDER BY nom ASC, prenom ASC;
ASC signifie ascendant (de A à Z, de 0 à 9). Pour l'ordre inverse, utilise DESC (descendant). Tu peux aussi limiter le nombre de résultats avec LIMIT, très utile pour éviter d'afficher des milliers de lignes pendant tes tests.
SELECT * FROM Notes ORDER BY note DESC LIMIT 5;
Cette requette te donnerait les 5 meilleures notes !
Affiner la recherche avec WHERE
SELECT * FROM Élèves c'est bien, mais si ta table a 1000 élèves, tu es un peu perdu. C'est là qu'intervient la clause WHERE ("où" en anglais). Elle te permet de filtrer les résultats selon une condition.
SELECT nom, prenom FROM Élèves WHERE classe = 'Terminale A';
Ici, tu ne récupères que les élèves de la Terminale A. Tu peux utiliser différents opérateurs :
- = : Égal à
- >, <, >=, <= : Supérieur/Inférieur à
- <> ou != : Différent de
- LIKE : Pour chercher un motif (très utile avec le symbole %).
Exemple avec LIKE :
SELECT titre FROM Livres WHERE titre LIKE '%Python%';
Cette requête trouve tous les livres dont le titre contient le mot "Python". Le symbole % remplace n'importe quelle séquence de caractères.
Combiner les conditions avec AND et OR
Tu peux être encore plus précis en combinant plusieurs conditions.
-- Les élèves de Terminale A qui ont plus de 15 de moyenne
SELECT nom, prenom FROM Élèves WHERE classe = 'Terminale A' AND moyenne >= 15;
-- Les élèves de Terminale A OU de Première B
SELECT nom, prenom FROM Élèves WHERE classe = 'Terminale A' OR classe = 'Première B';
Pense toujours à bien utiliser les parenthèses si tes conditions deviennent complexes pour contrôler l'ordre d'évaluation !
La puissance des jointures (JOIN) : relier les tables
C'est le concept le plus important et souvent le plus nouveau pour les débutants. Dans une base de données bien conçue, l'information est répartie dans plusieurs tables pour éviter les répétitions (c'est la normalisation). Par exemple, tu pourrais avoir :
- Une table Élèves (id_eleve, nom, prenom, id_classe)
- Une table Classes (id_classe, nom_classe, professeur_principal)
Comment faire pour afficher le nom de l'élève ET le nom de sa classe ? Il faut joindre (JOIN) les deux tables sur le champ qu'elles ont en commun : `id_classe`.
SELECT Élèves.nom, Élèves.prenom, Classes.nom_classe
FROM Élèves
INNER JOIN Classes ON Élèves.id_classe = Classes.id_classe;
Décortiquons :
- INNER JOIN : Type de jointure le plus courant. Il ne garde que les lignes où il y a une correspondance dans les deux tables.
- ON : C'est la condition qui dit comment relier les tables. Ici, on relie la colonne `id_classe` de la table Élèves à la colonne `id_classe` de la table Classes.
Les différents types de JOIN
Il en existe plusieurs, mais en NSI, concentre-toi sur ces deux-là :
- INNER JOIN : Résultat = intersection. Seules les lignes avec une correspondance dans les deux tables.
- LEFT JOIN (ou LEFT OUTER JOIN) : Garde TOUTES les lignes de la table de gauche (celle après FROM), même si il n'y a pas de correspondance dans la table de droite. Les champs manquants seront NULL.
Exemple avec LEFT JOIN : Afficher tous les élèves, même ceux qui ne sont pas encore inscrits dans une classe.
SELECT Élèves.nom, Classes.nom_classe
FROM Élèves
LEFT JOIN Classes ON Élèves.id_classe = Classes.id_classe;
Un élève sans `id_classe` (ou avec un `id_classe` qui n'existe pas dans la table Classes) apparaîtra avec `nom_classe` = NULL.
Mettre en pratique : un mini-projet NSI
Pour bien assimiler, rien ne vaut la pratique. Crée une petite base de données avec deux tables :
CREATE TABLE Auteurs (id INTEGER PRIMARY KEY, nom TEXT);
CREATE TABLE Livres (id INTEGER PRIMARY KEY, titre TEXT, id_auteur INTEGER, FOREIGN KEY (id_auteur) REFERENCES Auteurs(id));
Insère quelques données, puis entraîne-toi avec ces requêtes :
- Lister tous les livres.
- Trouver les livres dont le titre contient "algorithme".
- Afficher le titre du livre et le nom de son auteur (ça, c'est une jointure !).
- Afficher tous les auteurs, même ceux qui n'ont pas encore écrit de livre (LEFT JOIN).
Ces compétences en SELECT, WHERE et JOIN constituent l'essentiel de ce que tu dois maîtriser pour interroger des bases de données en NSI. Avec ça, tu es déjà bien armé pour la majorité des exercices et pour commencer à travailler sur des projets plus ambitieux !
