SQL - Créer et insérer#

Les bases de données relationnelles peuvent être créées et manipulées grâce au langage SQL (Structured Query Language). Il ne s'agit pas d'un langage de programmation, mais d'un langage de requête permettant d'influer directement sur la base de données en créant des tables, insérant des données, et en y recherchant des informations.

Pour exemplifier la création de tables et l'insertion de données, la base de données d'une bibliothèque basée sur le schéma relationnel ci-dessous sera créée.

Schéma relationnel

Création de tables#

Le langage SQL permet de créer des tables en spécifiant leur nom et le nom des différentes colonnes.

Pour créer une table, il faut utiliser l'instruction CREATE TABLE suivi du nom de la table et d'une paire de parenthèses. Entre ces parenthèses, nous indiquons la liste des attributs, ainsi que leur type de données.

Les types de données peuvent être les suivants :

  • INTEGER pour un nombre entier

  • REAL pour un nombre réel

  • TEXT pour du texte

  • DATE pour une date au format AAAA-MM-JJ

Finalement, on précise la clef primaire avec PRIMARY KEY suivi de parenthèses entre lesquelles on précise l'attribut devant faire office de clef primaire.

CREATE TABLE Livre (
    titre TEXT,
    auteur TEXT,
    date_pub DATE,
    numero_isbn INTEGER,
    prix REAL,
    PRIMARY KEY(numero_isbn)
);

Identifiants artificiels numériques#

Lorsque la clef primaire d'une table est un identifiant artificiel créé uniquement pour ce rôle, on peut utiliser le mot-clef AUTOINCREMENT dans la définition de la PRIMARY KEY afin que SQL se charge lui-même d'attribuer ce numéro unique aux futures lignes de la table. La valeur de cet identifiant doit obligatoirement être INTEGER

CREATE TABLE Utilisateur (
    nom TEXT,
    prenom TEXT,
    role TEXT,
    id_utilisateur INTEGER,
    PRIMARY KEY(id_utilisateur AUTOINCREMENT)
);

Clefs étrangères#

Lors de la création d'une table contenant des clefs étrangères, on doit également les spécifier avec FOREIGN KEY ... REFERENCES .... Après le FOREIGN KEY, on spécifie entre parenthèses quelle colonne est la clef étrangère. Puis, après le REFERENCES, on donne le nom de la table et de sa colonne référencée. Dans l'exemple ci-dessous, utilisateur est une clef étrangère référençant la colonne id_utilisateur de la table Utilisateur. De plus, livre est une clef étrangère référençant la colonne numero_isbn de la table Livre.

CREATE TABLE Emprunt (
    livre INTEGER,
    utilisateur INTEGER,
    date_emprunt DATE,
    id_emprunt INTEGER,
    PRIMARY KEY(id_emprunt AUTOINCREMENT),
    FOREIGN KEY(utilisateur) REFERENCES Utilisateur(id_utilisateur),
    FOREIGN KEY(livre) REFERENCES Livre(numero_isbn)
);

Insertion de données#

Pour insérer une ligne dans une table, il faut utiliser l'instruction INSERT INTO ... VALUES .... Après INSERT INTO, il faut préciser le nom de la table dans laquelle nous souhaitons ajoutons une ligne, ainsi que les colonnes à remplir. Nous ajoutons ensuite le mot-clef VALUES et une paire de parenthèses entre lesquelles nous indiquons les valeurs à insérer dans chaque colonne. L'ordre des valeurs doit être le même que celui établi plus tôt dans la requête.

Les valeurs de type TEXT et DATE doivent être entre guillemets simples, et la séparation entre les unités et les décimales d'une valeur REAL se fait avec un point.

INSERT INTO Livre(titre, auteur, date_pub, numero_isbn, prix)
VALUES ('La Vérité sur l`Affaire Harry Québert', 'Joël Dicker', '2012-03-01', 9782877068161, 23.95);

Lorsqu'on insère des données dans une table contenant une clef primaire qui a été définie avec AUTOINCREMENT, on peut omettre sa valeur et SQL se charge de l'attribuer automatiquement.

INSERT INTO Utilisateur(nom, prenom, role) VALUES ('Jan', 'Maxime', 'enseignant');

INSERT INTO Utilisateur(nom, prenom, role) VALUES ('Queloz', 'Aurélien', 'élève');

Exercices#

Exercice 8#

Quel type de données faut-il utiliser pour chacune de ces colonnes ?

  1. Le prix d'un article

  2. Le nom d'une ville

  3. Le nombre d'habitants d'une ville

  4. La date de sortie d'un film

  5. Le numéro de téléphone d'un client

  6. La note obtenue à une évaluation

  7. Le numéro de maillot d'un joueur

  8. L'adresse e-mail d'un utilisateur

Exercice 9#

Pour chacune de ces clefs primaires, déterminez si le mot-clef AUTOINCREMENT est nécessaire.

  1. numero_isbn dans une table Livre

  2. id_commentaire dans une table Commentaire

  3. email dans une table Utilisateur

  4. id_emprunt dans une table Emprunt

  5. plaque dans une table Voiture

  6. id_video dans une table Video

Exercice 10#

Chacune des requêtes ci-dessous comporte une erreur. Parfois, l'erreur fait directement buguer la requête avec un message d'erreur rouge. D'autres fois, la requête s'exécute sans problème mais la table créée est mal conçue.

Corrigez chacune de ces requêtes. Lisez bien les messages d'erreur, ils peuvent vous aider.

  1. CREATE TABLE Ville (
        nom TEXT,
        canton TEXT,
        population INTEGER,
    );
    
  2. CREATE TABLE Pays (
        nom TEXT,
        capitale TEXT,
        population INTEGER,
        PRIMARY KEY(nom AUTOINCREMENT)
    );
    
  3. CREATE TABLE Jeu (
        titre TEXT,
        studio TEXT,
        prix REAL,
        PRIMARY KEY(id_jeu)
    );
    
  4. CREATE TABLE Film (
        titre TEXT,
        annee,
        duree INTEGER,
        id_film INTEGER,
        PRIMARY KEY(id_film AUTOINCREMENT)
    );
    
  5. CREATE TABLE Eleve (
        nom TEXT,
        prenom TEXT,
        classe TEXT
    );
    

Exercice 11#

Le schéma relationnel ci-dessous ne contient qu'une seule table et représente une base de données d'évaluations.

Schéma relationnel

Partie A#

Ecrivez la requête SQL CREATE TABLE permettant de créer la table Evaluation. Veillez à bien préciser les types de données, la clef primaire et l'éventuel AUTOINCREMENT.


Partie B#

Ajoutez 2 évaluations dans la table créée dans la partie A :

  • Une évaluation de math nommée "Géométrie" faite le 2025-12-11 à laquelle vous avez fait 4.75

  • Une évaluation d'informatique nommée "Base de données" faite le 2025-10-30 à laquelle vous avez fait 6


Exercice 12#

Le schéma relationnel ci-dessous est celui d'une plateforme de streaming musical.

Schéma relationnel de la plateforme de streaming musical

La table Artiste a déjà été créée et remplie pour vous. Exécutez le bloc ci-dessous pour voir son contenu.

CREATE TABLE Artiste (
    nom TEXT,
    pays TEXT,
    id_artiste INTEGER,
    PRIMARY KEY(id_artiste AUTOINCREMENT)
);

INSERT INTO Artiste(nom, pays) VALUES ('Stromae', 'Belgique');
INSERT INTO Artiste(nom, pays) VALUES ('Angèle', 'Belgique');
INSERT INTO Artiste(nom, pays) VALUES ('Orelsan', 'France');

Partie A#

La création de la table Album est presque terminée : il ne reste que les deux dernières lignes à écrire. Remplacez les ... par le code correct.

CREATE TABLE Album (
    id_album INTEGER,
    titre TEXT,
    annee INTEGER,
    nb_pistes INTEGER,
    artiste INTEGER,
    PRIMARY KEY(...),
    FOREIGN KEY(...) REFERENCES ...
);

Partie B#

Si votre table est correctement créée, le bloc ci-dessous doit ajouter trois albums.

INSERT INTO Album(titre, annee, nb_pistes, artiste) VALUES ('Racine carrée', 2013, 15, 1);
INSERT INTO Album(titre, annee, nb_pistes, artiste) VALUES ('Nonante-Cinq', 2021, 13, 2);
INSERT INTO Album(titre, annee, nb_pistes, artiste) VALUES ('Civilisation', 2021, 15, 3);

Ajoutez maintenant vous-même l'album Multitude de Stromae, sorti en 2022 et contenant 12 pistes.


Exercice 13#

On reprend la même plateforme de streaming, cette fois entièrement créée et remplie avec les trois artistes de l'exercice précédent. Pour chacune des requêtes ci-dessous, prédisez d'abord si elle va fonctionner, puis exécutez-la pour vérifier.

  1. INSERT INTO Artiste(nom, pays) VALUES ('Damso', 'Belgique');
    
  2. INSERT INTO Artiste(nom, pays) VALUES (Damso, Belgique);
    
  3. INSERT INTO Album(titre, annee, nb_pistes, artiste)
    VALUES ('Multitude', 2022, 12, 99);
    
  4. INSERT INTO Album(titre, artiste) VALUES ('Racine carrée', 1);
    
  5. INSERT INTO Artiste(nom, pays, id_artiste) VALUES ('Zaho de Sagazan', 'France');
    
  6. INSERT INTO Album VALUES ('Nonante-Cinq', 2021, 13, 2);
    

Exercice 14#

Le schéma relationnel ci-dessous décrit une base de données d'équipes de foot et leurs joueur.euse.s.

Schéma relationnel

Partie A#

Commencez par écrire, ci-dessous, la requête permettant de créer la table Equipe.


Si votre code SQL est correct, le code ci-dessous devrait permettre de créer et enregistrer 3 nouvelles équipes.

INSERT INTO Equipe(nom, entraineur, budget)
VALUES('PSG', 'Luis Enrique', 850000000);

INSERT INTO Equipe(nom, entraineur, budget)
VALUES('FC Gottéron', 'Jean-Marc Genoud', 2500);

INSERT INTO Equipe(nom, entraineur, budget)
VALUES('Young Boys', 'Giorgio Contini', 77900000);

Partie B#

Créez maintenant la table Joueur. N'oubliez pas de référencer la clef étrangère avec FOREIGN KEY ... REFERENCES .... (Ne mettez pas d'accent sur le e de l'attribut equipe)


Avant de l'exécuter, prédisez le résultat de la requête INSERT INTO ci-dessous.

Cette requête va-t-elle fonctionner ?

Si votre code est correct, cette requête ne doit PAS fonctionner. Pourquoi est-ce le cas ? Si cette requête ajoute bel et bien un 1er joueur à cette table, retravaillez le référencement de la clef étrangère dans la création de table.

INSERT INTO Joueur(prénom, nom, numéro_maillot, equipe)
VALUES('Kylian', 'Mbappé', 10, 'Real Madrid')

Partie C#

Ajoutez maintenant 3 nouveaux joueurs dans cette base de données.

  • Aurélien Queloz (n° 12) est dans l'équipe entrainée par Jean-Marc Genoud

  • Isaac Genoud (n° 7) fait partie de la même équipe

  • Maxime Dupasquier (n° 3) est quant à lui dans l'équipe de Giorgi Contini.

Grâce au AUTOINCREMENT, ces joueurs devraient avoir automatiquement les id_joueur 1, 2, 3.