Cours RechercherCtrl K

Fiches de révision

Fiches SQL

7 fiches, une par leçon, dans l'ordre du cours. Retour au cours SQL

SQL · Leçon 1

Les bases de données et SELECT

À retenir

  • Une base de données range les informations dans des tables : une ligne = un élément, une colonne = une information.
  • SQL est le langage des bases de données. Une requête se termine par ;.
  • SELECT colonne1, colonne2 FROM table; lit des colonnes ; SELECT * les lit toutes (à éviter dans une vraie application).
  • AS renomme une colonne du résultat ; DISTINCT enlève les doublons.

Mémo

SELECT * FROM eleves;
SELECT prenom, ville FROM eleves;
SELECT prenom AS eleve FROM eleves;
SELECT DISTINCT ville FROM eleves;

Pièges à éviter

  • Oublier la virgule entre deux colonnes : SELECT prenom ville veut dire « prenom renommée en ville ».
  • Écrire FROM avant SELECT.
  • Oublier le point-virgule quand il y a plusieurs requêtes.

Revoir la leçon et ses exercices

SQL · Leçon 2

Filtrer et trier

À retenir

  • WHERE condition garde seulement les lignes où la condition est vraie. Textes entre apostrophes : 'Chartres'.
  • Comparaisons : = <> < > <= >= ; combinaisons : AND, OR, BETWEEN … AND …, IN (…).
  • AND passe avant OR : mets des parenthèses.
  • LIKE 'D%' : commence par D ; % = n'importe quels caractères. IS NULL pour une case vide.
  • ORDER BY colonne ASC/DESC trie, LIMIT n garde n lignes. Ordre : SELECT … FROM … WHERE … ORDER BY … LIMIT.

Mémo

SELECT prenom, age FROM eleves
WHERE (ville = 'Dreux' OR ville = 'Paris') AND age >= 19
ORDER BY age DESC
LIMIT 3;

SELECT prenom FROM eleves WHERE nom LIKE '%in';
SELECT prenom FROM eleves WHERE classe_id IS NULL;

Pièges à éviter

  • Écrire = NULL au lieu de IS NULL.
  • Oublier les parenthèses autour d'un OR combiné avec un AND.
  • Mettre ORDER BY avant WHERE.
  • Oublier les apostrophes autour d'un texte.

Revoir la leçon et ses exercices

SQL · Leçon 3

Ajouter, modifier, supprimer

À retenir

  • INSERT INTO table (col1, col2) VALUES (v1, v2); ajoute une ligne (valeurs dans le même ordre que les colonnes).
  • UPDATE table SET col = valeur WHERE …; modifie ; on peut calculer à partir de l'ancienne valeur (age = age + 1).
  • DELETE FROM table WHERE …; supprime.
  • Sans WHERE, UPDATE et DELETE touchent toutes les lignes : on teste d'abord avec un SELECT.
  • On filtre de préférence sur l'id, qui est unique.

Mémo

INSERT INTO eleves (prenom, nom, age, ville)
VALUES ('Nina', 'Robert', 18, 'Chartres');

UPDATE eleves SET ville = 'Lucé' WHERE id = 2;
UPDATE eleves SET age = age + 1 WHERE ville = 'Chartres';

DELETE FROM notes WHERE note < 10;

Pièges à éviter

  • Oublier le WHERE d'un UPDATE ou d'un DELETE.
  • Donner les valeurs dans un autre ordre que les colonnes.
  • Filtrer sur un prénom alors que plusieurs élèves peuvent l'avoir.

Revoir la leçon et ses exercices

SQL · Leçon 4

Créer des tables

À retenir

  • CREATE TABLE nom ( colonne TYPE CONTRAINTES, … ); décrit une table ; DROP TABLE nom; la supprime avec ses données.
  • Types : INT, DECIMAL(6, 2) (prix), VARCHAR(50) (texte court), TEXT, DATE, DATETIME, BOOLEAN.
  • PRIMARY KEY identifie chaque ligne ; AUTO_INCREMENT la numérote tout seul.
  • NOT NULL (obligatoire), UNIQUE (pas de doublon), DEFAULT (valeur par défaut).

Mémo

CREATE TABLE inscrits (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(120) NOT NULL UNIQUE,
    ville VARCHAR(80) DEFAULT 'Chartres',
    inscrit_le DATE
);

Pièges à éviter

  • Une virgule après la dernière colonne.
  • Oublier une virgule entre deux colonnes.
  • Stocker un prix en FLOAT : des arrondis bizarres apparaissent ; DECIMAL est exact.

Revoir la leçon et ses exercices

SQL · Leçon 5

Compter et regrouper

À retenir

  • Fonctions d'agrégat : COUNT(*), AVG(), MIN(), MAX(), SUM() : plusieurs lignes donnent une seule valeur.
  • GROUP BY colonne fait un calcul par groupe.
  • WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes après.
  • Avec GROUP BY, le SELECT ne contient que les colonnes du regroupement et des calculs.
  • Ordre : SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT.

Mémo

SELECT ville, COUNT(*) AS nombre, AVG(age) AS age_moyen
FROM eleves
WHERE age >= 18
GROUP BY ville
HAVING COUNT(*) >= 2
ORDER BY nombre DESC;

Pièges à éviter

  • Mettre WHERE COUNT(*) > 1 : un calcul se filtre avec HAVING.
  • Ajouter dans le SELECT une colonne qui n'est pas dans le GROUP BY.

Revoir la leçon et ses exercices

SQL · Leçon 6

Relier des tables : les jointures

À retenir

  • On range chaque chose une seule fois dans sa table, et on relie les tables avec une clé étrangère (classe_id contient l'id d'une classe).
  • JOIN table ON a.colonne = b.colonne met côte à côte les lignes qui correspondent.
  • JOIN (= INNER JOIN) ne garde que les lignes qui ont une correspondance ; LEFT JOIN garde toutes celles de la table de gauche (avec NULL sinon).
  • Quand deux tables ont une colonne du même nom, on précise table.colonne, ou un surnom : FROM eleves e.

Mémo

SELECT e.prenom, c.nom
FROM eleves e
JOIN classes c ON e.classe_id = c.id;

SELECT e.prenom
FROM eleves e
LEFT JOIN classes c ON e.classe_id = c.id
WHERE c.id IS NULL;

Pièges à éviter

  • Oublier le ON : chaque élève serait associé à chaque classe.
  • Écrire id tout seul quand les deux tables en ont un.
  • Utiliser JOIN quand on veut aussi les lignes sans correspondance (il faut LEFT JOIN).

Revoir la leçon et ses exercices

SQL · Défi final

Le classement de la promo

À retenir

  • Une requête complète suit toujours le même ordre : SELECT … FROM … JOIN … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT.
  • On construit une requête difficile pas à pas : d'abord la jointure, puis le regroupement, puis les filtres et le tri.

Mémo

SELECT e.prenom, AVG(n.note) AS moyenne
FROM eleves e
JOIN notes n ON n.eleve_id = e.id
GROUP BY e.prenom
HAVING COUNT(*) >= 2
ORDER BY moyenne DESC;

Pièges à éviter

  • Filtrer un calcul avec WHERE au lieu de HAVING.

Revoir la leçon et ses exercices