Mini-cours sur le SQL

SQL (Structured Query Language) est un langage qui permet de créer, lire, modifier et supprimer des données dans une base de données relationnelle (MySQL, PostgreSQL, SQL Server, etc.).

Dans ce mini-cours, on va partir de 0 : qu’est-ce qu’une base de données, quels sont les sous-langages de SQL (LDD, LMD, etc.) puis les principales commandes.

1. Créer une base de données et des tables

Pour créer une base de données en local avec WAMP :

  1. Lance WAMP et ouvre phpMyAdmin (généralement via http://localhost/phpmyadmin).
  2. Connecte-toi avec l’utilisateur root (par défaut, pas de mot de passe).
  3. Clique sur Nouvelle base de données dans le menu de gauche.
  4. Donne un nom à ta base (ex : magasin), choisis le interclassement (utf8_general_ci conseillé), puis clique sur Créer.
Création d'une base dans phpMyAdmin Création d'une table dans phpMyAdmin
CREATE TABLE utilisateurs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL,
    date_creation DATE
);

2. Remplir les tables avec un fichier CSV

Pour importer des données dans une table depuis un fichier CSV avec phpMyAdmin :

  1. Prépare un fichier CSV avec les colonnes séparées par des virgules.
  2. Dans phpMyAdmin, sélectionne la table puis va dans l’onglet Importer.
  3. Choisis ton fichier CSV, configure le séparateur (souvent ,), puis lance l’import.
Import CSV dans phpMyAdmin

3. Les formes normales

Les formes normales sont des règles pour organiser les données et éviter les redondances :

4. Le modèle relationnel en détail

Le modèle relationnel organise les données en tables reliées entre elles par des relations (clés étrangères). Chaque table représente une entité (ex : utilisateurs, commandes), chaque ligne une instance, chaque colonne un attribut.

Schéma du modèle relationnel

5. Langage d’interrogation de données (LID)

Le langage d’interrogation de données (LID) permet de lire et rechercher des données dans les tables. Il s’appuie principalement sur la commande SELECT et ses variantes (WHERE, ORDER BY, GROUP BY, etc.).

Requête SELECT dans phpMyAdmin
SELECT nom, email FROM utilisateurs WHERE actif = TRUE;
SELECT COUNT(*) FROM commandes WHERE montant > 100;

6. Auto-incrémentation et saisie manuelle

AUTO_INCREMENT permet d’ajouter automatiquement une valeur unique à chaque nouvelle ligne.
Pour activer l'auto-incrémentation via l'interface graphique de phpMyAdmin :

  1. Dans phpMyAdmin, sélectionnez la base de données, puis la table concernée.
  2. Allez dans l'onglet Structure.
  3. Cliquez sur l'icône Modifier (en forme de crayon) à côté de la colonne.
  4. Cochez la case A_I (Auto Increment).
  5. Enregistrez les modifications.
Activer l'auto-incrémentation dans phpMyAdmin Activer l'auto-incrémentation dans phpMyAdmin
INSERT INTO utilisateurs (id, nom) VALUES (10, 'Manuel');
CREATE TABLE utilisateurs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(100) NOT NULL
);

7. Trier les résultats et fonctions monotable

Pour trier les résultats d’une requête, on utilise ORDER BY :

SELECT nom, email FROM utilisateurs
ORDER BY nom ASC;  -- Tri alphabétique croissant

SELECT * FROM commandes
ORDER BY montant DESC;  -- Tri du plus grand au plus petit

Les fonctions d’agrégation permettent de calculer des statistiques sur une colonne :

SELECT COUNT(*) FROM utilisateurs;
SELECT AVG(montant) FROM commandes;
SELECT MAX(date_commande) FROM commandes;

8. Restrictions de données (contraintes SQL)

Les contraintes permettent de garantir la validité et la cohérence des données dans une table :

CREATE TABLE utilisateurs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE,
    age INT CHECK (age >= 0),
    actif BOOLEAN DEFAULT TRUE
);
CREATE TABLE commandes (
    id INT PRIMARY KEY AUTO_INCREMENT,
    utilisateur_id INT,
    montant DECIMAL(10,2) NOT NULL CHECK (montant > 0),
    date_commande DATE,
    FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)
);

9. Jointure simple

La jointure simple (INNER JOIN) permet de lier deux tables selon une clé étrangère :

SELECT u.nom, c.montant
FROM utilisateurs u
INNER JOIN commandes c ON c.utilisateur_id = u.id;

10. Gestion des dates

Pour manipuler les dates en SQL :

SELECT * FROM commandes WHERE date_commande > '2024-01-01';
SELECT * FROM commandes WHERE YEAR(date_commande) = 2024;
SELECT * FROM commandes WHERE MONTH(date_commande) = 6;

11. Jointures multitables

Les jointures multitables permettent de combiner plusieurs tables en une seule requête :

SELECT u.nom, c.montant, p.nom AS produit
FROM utilisateurs u
INNER JOIN commandes c ON c.utilisateur_id = u.id
INNER JOIN produits p ON c.produit_id = p.id;

8. Résumé

Comme pour HTML et CSS, le mieux pour apprendre SQL est de tester ces commandes dans un vrai système (par exemple MySQL ou PostgreSQL) et d’observer le résultat.