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 utilisateur_id de la table Utilisateur. De plus, livre est une clef étrangère référanç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 4#

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 5#

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)


Si votre code est correct, la requête INSERT INTO ci-dessous 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.