Cours NSI Terminale - Thème 2.
Dans ce dernier TP, nous allons voir comment insérer, mettre à jour ou supprimer des enregistrements dans des tables.
Commencez par valider les cellules suivantes afin d'activer la fonctionnalité SQL de Jupyter et de charger la base du TP précédent.
%load_ext sql
%sql sqlite:///livres_db
Nous avons déjà rencontré cerre requète INSERT. Elle s'applique que la table soit vide ou nom. On peut très bien ajouter par exemple une troisième langue dans notre table Langues
%sql INSERT INTO Langues (Langue) VALUES('Klingon');
# Vérifions :
%sql SELECT * FROM Langues;
Les requêtes UPDATE et DELETE fonctionnent sur le même modèle que les requêtes SELECT. Attention, on a vite fait d'effacer toutes ses données si on ne configure pas bien sa requête. Une bonne habitude à prendre est de tester d'abord ses critères à l'aide d'un SELECT.
Observez les exemples ci-dessous :
%sql SELECT NomAuteur FROM Auteurs WHERE IdAuteur = 10;
C'est bien lui !!
Modifions le nom de l'auteur grâce à une requête de mise à jour :
UPDATE table
SET attribut1 = valeur1, attribut2 = valeur2, ...
WHERE critère;
%%sql
UPDATE Auteurs
SET NomAuteur = "Ze Djloule", PrenomAuteur = "Juju"
WHERE IdAuteur=10;
SELECT * FROM Auteurs ;
supprimons vite cette entrée ! Nous utiliseerons une requête DELETE FROM table WHERE critere
Attention : soyez bien sûr de votre critère sous peine de perdre des données importantes !
%%sql
DELETE FROM Auteurs WHERE IdAuteur=10;
SELECT * FROM Auteurs;
Dans une base de données relationnelle il faut être vigilant lors de la suppression d'enregistrements : en effet la suppression d'un enregistrement entraîne la suppression de sa clé primaire qui peut être utilisée en tant que clé externe dans une autre table. Cela entraîne la corruption des données. Observez l'exemple ci-dessous dans lequel je me suis attribué un livre célèbre sans toucher à la table Livres
Il existe en SQL des moyens pour se prémunir de ce type de problèmes mais cela dépasse le cadre de ce cours.
%%sql
INSERT INTO Auteurs
(NomAuteur, PrenomAuteur, IdLangue, AnneeNaissance)
VALUES
("Lecluse", "Olivier", 2, 1850);
SELECT Titre, NomAuteur from Livres JOIN Auteurs USING (IdAuteur);
%%sql
/*
# YOUR CODE HERE
raise NotImplementedError()
*/
result = %sql SELECT Titre, NomAuteur AnneePubli from Livres JOIN Auteurs USING (IdAuteur);
assert len(result) == 15