Premières requêtes : SELECT et FROM

Première leçon du cours SQL fondamentaux (SELECT, filtres, agrégats), en accès libre : environ 15 minutes, 3 exercices et 3 questions de quiz. C'est la leçon de base du catalogue ; dans l'espace étudiant, elle est réécrite pour ton profil.

Objectifs

  • Comprendre ce qu'est une table relationnelle (lignes, colonnes, types)
  • Écrire une requête SELECT ... FROM pour lire des colonnes choisies
  • Créer des colonnes calculées et les renommer avec AS
  • Limiter le nombre de lignes affichées avec LIMIT

SELECT et FROMAlias de colonnes (AS)Colonnes calculéesLIMIT

SQL (Structured Query Language) est le langage standard pour interroger les bases de données relationnelles : SQLite, PostgreSQL, MySQL, SQL Server… Dans une base relationnelle, les données sont rangées dans des tables. Une table ressemble à une feuille de tableur, mais en plus strict : chaque colonne a un nom et un type (texte, entier, date…), et chaque ligne représente un enregistrement, par exemple un produit.

Voici la table produits utilisée dans cette leçon :

id nom categorie prix stock
1 Clavier Informatique 50 12
2 Souris Informatique 20 40
… … … … …

Lire des colonnes

La requête la plus simple combine deux mots-clés : SELECT (quelles colonnes ?) et FROM (quelle table ?).

-- Le nom et le prix de chaque produit
SELECT nom, prix
FROM produits;

Les colonnes sont séparées par des virgules et apparaissent dans l’ordre où vous les écrivez. Pour tout afficher, on utilise l’étoile :

SELECT *          -- toutes les colonnes
FROM produits;

SELECT * est pratique pour découvrir une table, mais dans un vrai programme, préférez nommer les colonnes : la requête est plus lisible, plus rapide, et ne casse pas si quelqu’un ajoute une colonne.

Calculer et renommer

SELECT accepte aussi des expressions. On peut calculer la valeur du stock de chaque produit :

SELECT nom,
       prix * stock AS valeur_stock   -- colonne calculée + alias
FROM produits;

Le mot-clé AS donne un nom (un alias) à la colonne du résultat. La table produits n’est pas modifiée : une requête SELECT ne fait que lire.

Attention à la valeur spéciale NULL, qui signifie « inconnu » ou « absent ». Le stock du tapis de souris vaut NULL, donc prix * stock vaut aussi NULL pour ce produit : tout calcul avec une valeur inconnue donne un résultat inconnu.

Limiter le nombre de lignes

Sur une table de plusieurs millions de lignes, on n’affiche pas tout. LIMIT restreint le résultat :

SELECT nom, categorie
FROM produits
LIMIT 3;   -- au plus 3 lignes

Sans tri explicite (vu dans une prochaine leçon), la base ne garantit pas quelles lignes sortent en premier. LIMIT seul sert donc surtout à jeter un œil aux données.

Quelques règles de syntaxe

  • Les mots-clés (SELECT, FROM) ne sont pas sensibles à la casse : select fonctionne aussi, mais l’usage est de les écrire en majuscules.
  • Les textes s’écrivent entre apostrophes simples : 'Informatique'.
  • -- commence un commentaire jusqu’à la fin de la ligne.
  • Le point-virgule termine une requête ; il est indispensable quand on en enchaîne plusieurs.

Vous savez maintenant lire une table, choisir ses colonnes et créer des colonnes calculées : c’est la base de toutes les requêtes que vous écrirez ensuite.

Exercices

Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.

  1. CodeDifficulté 1SQL (SQLite) dans le navigateur2 indices

    Afficher le nom et le prix

    Écrivez une requête qui affiche le nom et le prix de tous les produits de la table produits, dans cet ordre de colonnes.

    Données de l'exercice (SQL)
    CREATE TABLE produits (
      id INTEGER PRIMARY KEY,
      nom TEXT NOT NULL,
      categorie TEXT NOT NULL,
      prix INTEGER NOT NULL,   -- prix en euros
      stock INTEGER            -- NULL = stock inconnu
    );
    INSERT INTO produits VALUES
     (1, 'Clavier', 'Informatique', 50, 12),
     (2, 'Souris', 'Informatique', 20, 40),
     (3, 'Écran 27 pouces', 'Informatique', 229, 5),
     (4, 'Lampe de bureau', 'Maison', 35, 0),
     (5, 'Chaise ergonomique', 'Mobilier', 189, 3),
     (6, 'Bureau assis-debout', 'Mobilier', 399, 2),
     (7, 'Tapis de souris', 'Informatique', 10, NULL),
     (8, 'Plante verte', 'Maison', 15, 25);
    -- Votre requête ici
    SELECT ...
    FROM produits;
  2. CodeDifficulté 2SQL (SQLite) dans le navigateur2 indices

    Valeur du stock

    Affichez le nom de chaque produit et une colonne calculée nommée valeur_stock égale à prix * stock.

    Données de l'exercice (SQL)
    CREATE TABLE produits (
      id INTEGER PRIMARY KEY,
      nom TEXT NOT NULL,
      categorie TEXT NOT NULL,
      prix INTEGER NOT NULL,   -- prix en euros
      stock INTEGER            -- NULL = stock inconnu
    );
    INSERT INTO produits VALUES
     (1, 'Clavier', 'Informatique', 50, 12),
     (2, 'Souris', 'Informatique', 20, 40),
     (3, 'Écran 27 pouces', 'Informatique', 229, 5),
     (4, 'Lampe de bureau', 'Maison', 35, 0),
     (5, 'Chaise ergonomique', 'Mobilier', 189, 3),
     (6, 'Bureau assis-debout', 'Mobilier', 399, 2),
     (7, 'Tapis de souris', 'Informatique', 10, NULL),
     (8, 'Plante verte', 'Maison', 15, 25);
    SELECT nom, ... AS valeur_stock
    FROM produits;
  3. QCMDifficulté 11 indice

    Lire une requête

    Que renvoie SELECT nom prix FROM produits; (sans virgule) ?

    • Deux colonnes : nom et prix
    • Une seule colonne, contenant les noms, intitulée prix
    • Une erreur de syntaxe dans toutes les bases

Quiz de fin de leçon

  1. Quel mot-clé indique la table à lire ?

    • SELECT
    • FROM
    • TABLE
  2. Que vaut prix * stock si stock est NULL ?

    • 0
    • prix
    • NULL
  3. Pourquoi éviter SELECT * dans le code d’une application ?

    • C'est interdit en SQL standard
    • On lit des colonnes inutiles et la requête dépend de la structure exacte de la table
    • Cela modifie la table

La suite du cours

  1. Filtrer les lignes avec WHERE18 min
  2. Trier et dédoublonner : ORDER BY et DISTINCT15 min
  3. Résumer les données : fonctions d'agrégat16 min
  4. Regrouper avec GROUP BY et filtrer avec HAVING20 min

SQL fondamentaux (SELECT, filtres, agrégats) · Débutant · 2 h 09