NSIterminale spe

NSI · terminale speGratuit

Chapitre 2Bases de données relationnelles et SQL

L'essentiel en 30 secondes

Une base de données relationnelle organise les données en tables (relations). Chaque table a des colonnes (attributs) et des lignes (enregistrements). La clé primaire identifie de façon unique chaque ligne. La clé étrangère relie deux tables entre elles. On interroge la base avec SQL : SELECT pour lire, WHERE pour filtrer, JOIN pour croiser des tables, et les fonctions d'agrégation (COUNT, SUM, AVG) pour calculer.

Notions clés

Relation (table)
Ensemble de n-uplets (lignes) partageant le même schéma (même liste d'attributs typés).
Clé primaire
Attribut (ou groupe d'attributs) qui identifie de façon unique chaque enregistrement. Jamais NULL, jamais de doublon.
Clé étrangère
Attribut d'une table qui référence la clé primaire d'une autre table. Assure l'intégrité référentielle.
Requête SELECT
Instruction SQL de lecture : SELECT attributs FROM table WHERE condition ORDER BY attribut.
Jointure (JOIN)
Opération qui combine les lignes de deux tables selon une condition de correspondance entre clé primaire et clé étrangère.
Fonctions d'agrégation
COUNT, SUM, AVG, MIN, MAX — opèrent sur un ensemble de lignes, souvent avec GROUP BY.

Formules

SELECT avec filtre et tri

SELECTnom,prenomFROMelevesWHEREclasse=TG1ORDERBYnomASC;`SELECT nom, prenom FROM eleves WHERE classe = 'TG1' ORDER BY nom ASC;`

Condition : Requête de base : projection + sélection + tri

JOIN entre deux tables

SELECTe.nom,n.noteFROMeleveseJOINnotesnONe.id=n.ideleveWHEREn.matiere=NSI;`SELECT e.nom, n.note FROM eleves e JOIN notes n ON e.id = n.id_eleve WHERE n.matiere = 'NSI';`

Condition : Croisement de tables via clé étrangère

Agrégation avec GROUP BY

SELECTclasse,AVG(note)ASmoyenneFROMnotesGROUPBYclasseHAVINGAVG(note)>=10;`SELECT classe, AVG(note) AS moyenne FROM notes GROUP BY classe HAVING AVG(note) >= 10;`

Condition : HAVING filtre après agrégation (WHERE filtre avant)

INSERT / UPDATE / DELETE

INSERTINTOeleves(nom,classe)VALUES(Dupont,TG2);\nUPDATEelevesSETclasse=TG3WHEREid=42;\nDELETEFROMelevesWHEREid=42;`INSERT INTO eleves (nom, classe) VALUES ('Dupont', 'TG2');\nUPDATE eleves SET classe = 'TG3' WHERE id = 42;\nDELETE FROM eleves WHERE id = 42;`

Condition : Modification des données — à connaître mais rarement au bac

A retenir

  • WHERE filtre les lignes AVANT agrégation, HAVING filtre APRÈS agrégation.
  • Une clé primaire est unique et non nulle ; une clé étrangère peut être nulle.
  • JOIN sans condition (ou avec un mauvais ON) produit un produit cartésien — explosion du nombre de lignes.

Erreurs classiques

Erreur : Confondre WHERE et HAVING

Correction : WHERE s'applique aux lignes individuelles. HAVING s'applique aux groupes formés par GROUP BY.

Erreur : Oublier le ON dans un JOIN

Correction : Sans ON, tu obtiens un produit cartésien (toutes les combinaisons). Toujours préciser la condition de jointure.

Erreur : Mettre une colonne non agrégée dans SELECT avec GROUP BY

Correction : Avec GROUP BY, chaque colonne dans SELECT doit être soit dans GROUP BY, soit dans une fonction d'agrégation.

Astuce méthode

Face à une requête SQL complexe au bac, décompose-la étape par étape dans l'ordre d'exécution : d'abord FROM (quelles tables ?), puis WHERE (quelles lignes ?), puis GROUP BY, puis SELECT. Écris le résultat intermédiaire à chaque étape.