Aller au contenu

Un peu de SQL⚓︎

Dans cet exercice une fonction initialise_base_donnees et une fonction execute_requete vous sont fournies. L'exercice utilise les mots SELECT FROM WHERE JOIN INSERT INTO VALUES et ORDER BY

L'étude de la fonction initialise vous donnera le schéma de la base de données.

On demande de compléter le code proposé pour réaliser les requêtes SQL suivantes :

  1. Obtenir la salle et la marque de l'ordinateur
  2. Obtenir la salle et la marque de l'ordinateur s'il y a un vidéo-projecteur
  3. Classer par ordre croissant les ordinateurs avec une année d'entrée supérieure ou égale à 2017
  4. Écrire une requête SQL permettant d'obtenir le nom de l'imprimante, le nom de la salle et de le nom de l'ordinateur connecté à cette imprimante
  5. Écrire une requête SQL permettant d'insérer un nouveau vidéo-projecteur de marque NEC, modèle ME402X, sans TNI dans la salle 315.

Exemples

🐍 Console Python
>>> execute_requete("SELECT COUNT(*) FROM Ordinateur")
[(5,)]
assert sorted(requete1) == [bksl-nl ("012", "HP"),bksl-nl ("114", "Lenovo"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl]bksl-nlassert sorted(requete2) == [("Gen-24", "012"), ("Tech-62", "114"), ("Gen-132", "223")]bksl-nlassert sorted(requete3) == [bksl-nl ("Gen-132", "223", "Dell", "Insipiron Compact", 2019, 1),bksl-nl ("Gen-133", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl ("Gen-134", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl]bksl-nlassert sorted(requete4) == [bksl-nl ("imppy-undBTSpy-undCouleur", "114", "Tech-62"),bksl-nl ("imppy-undBTSpy-undNB", "114", "Tech-62"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-132"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-133"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-134"),bksl-nl]bksl-nlassert executepy-undrequete("SELECT py-str FROM Videoprojecteur WHERE salle = '315'") == [bksl-nl ("315", "NEC", "ME402X", 0)bksl-nl]bksl-nlbksl-nl ∞/∞

import sqlite3bksl-nlbksl-nlbksl-nldef initialisationpy-undbasepy-unddepy-unddonnee():bksl-nl base = sqlite3.connect(":memory:")bksl-nl curseur = base.cursor()bksl-nlbksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Ordinateurbksl-nl (nompy-undordi text, salle text, marquepy-undordi text, modelepy-undordi,bksl-nl annee int, video int, PRIMARY KEY (nompy-undordi ));bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Videoprojecteur (salle text, marquepy-undvideo text,bksl-nl modelepy-undvideo text, tni int)bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Imprimantebksl-nl (nompy-undimprimante text, marquepy-undimp text, modelepy-undimp text, nompy-undordi text,bksl-nl PRIMARY KEY (nompy-undimprimante, nompy-undordi))bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Ordinateur (nompy-undordi, salle, marquepy-undordi, modelepy-undordi,bksl-nl annee, video) VALUESbksl-nl ("Gen-24", "012", "HP", "compaq pro 6300", 2012, 1),bksl-nl ("Tech-62", "114", "Lenovo", "p300", 2015, 1),bksl-nl ("Gen-132", "223", "Dell", "Insipiron Compact", 2019, 1),bksl-nl ("Gen-133", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl ("Gen-134", "223", "Dell", "Insipiron Compact", 2019, 0)bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Imprimante (nompy-undimprimante, marquepy-undimp, modelepy-undimp,bksl-nl nompy-undordi) VALUESbksl-nl ("imppy-undBTSpy-undNB", "HP", "Laserjet pro M15w", "Tech-62"),bksl-nl ("imppy-undBTSpy-undCouleur", "Canon", "Megatank Pixma G5050", "Tech-62"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-132"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-133"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-134")bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Videoprojecteur (salle, marquepy-undvideo, modelepy-undvideo, tni)bksl-nl VALUESbksl-nl ("012", "Epson", "xb27", 1),bksl-nl ("114", "Sanyo", "PLV-Z3", 0),bksl-nl ("223", "Optoma", "HD143X", 0),bksl-nl ("225", "Optoma", "HD143X", 1)bksl-nl """bksl-nl )bksl-nl base.commit()bksl-nl return curseurbksl-nlbksl-nlbksl-nlcurseur = initialisationpy-undbasepy-unddepy-unddonnee()bksl-nlbksl-nlbksl-nldef executepy-undrequete(requete: str) -> list:bksl-nl curseur.execute(requete)bksl-nl return curseur.fetchall()bksl-nlbksl-nlbksl-nlrequete1 = executepy-undrequete(...)bksl-nlbksl-nlrequete2 = executepy-undrequete(...)bksl-nlbksl-nlrequete3 = executepy-undrequete(...bksl-nl)bksl-nlrequete4 = executepy-undrequete(...)bksl-nlbksl-nlrequete5 = executepy-undrequete(...)bksl-nlbksl-nlassert sorted(requete1) == [bksl-nl ("012", "HP"),bksl-nl ("114", "Lenovo"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl]bksl-nlassert sorted(requete2) == [bksl-nl ("Gen-24", "012"), ("Tech-62", "114"), ("Gen-132", "223")bksl-nl]bksl-nlassert sorted(requete3) == [bksl-nl ("Gen-132", "223", "Dell", "Insipiron Compact", 2019, 1),bksl-nl ("Gen-133", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl ("Gen-134", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl]bksl-nlassert sorted(requete4) == [bksl-nl ("imppy-undBTSpy-undCouleur", "114", "Tech-62"),bksl-nl ("imppy-undBTSpy-undNB", "114", "Tech-62"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-132"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-133"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-134"),bksl-nl]bksl-nlassert executepy-undrequete("SELECT py-str FROM Videoprojecteur WHERE salle = '315'") == [bksl-nl ("315", "NEC", "ME402X", 0)bksl-nl]bksl-nlbksl-nlimport sqlite3bksl-nlbksl-nlbksl-nldef initialisationpy-undbasepy-unddepy-unddonnee():bksl-nl base = sqlite3.connect(":memory:")bksl-nl curseur = base.cursor()bksl-nlbksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Ordinateurbksl-nl (nompy-undordi text, salle text, marquepy-undordi text, modelepy-undordi,bksl-nl annee int, video int, PRIMARY KEY (nompy-undordi ));bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Videoprojecteur (salle text, marquepy-undvideo text,bksl-nl modelepy-undvideo text, tni int)bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl CREATE TABLE Imprimantebksl-nl (nompy-undimprimante text, marquepy-undimp text, modelepy-undimp text, nompy-undordi text,bksl-nl PRIMARY KEY (nompy-undimprimante, nompy-undordi))bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Ordinateur (nompy-undordi, salle, marquepy-undordi, modelepy-undordi,bksl-nl annee, video) VALUESbksl-nl ("Gen-24", "012", "HP", "compaq pro 6300", 2012, 1),bksl-nl ("Tech-62", "114", "Lenovo", "p300", 2015, 1),bksl-nl ("Gen-132", "223", "Dell", "Insipiron Compact", 2019, 1),bksl-nl ("Gen-133", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl ("Gen-134", "223", "Dell", "Insipiron Compact", 2019, 0)bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Imprimante (nompy-undimprimante, marquepy-undimp, modelepy-undimp,bksl-nl nompy-undordi) VALUESbksl-nl ("imppy-undBTSpy-undNB", "HP", "Laserjet pro M15w", "Tech-62"),bksl-nl ("imppy-undBTSpy-undCouleur", "Canon", "Megatank Pixma G5050", "Tech-62"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-132"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-133"),bksl-nl ("imppy-undsalle-info1", "Brother", "2360DN", "Gen-134")bksl-nl """bksl-nl )bksl-nl curseur.execute(bksl-nl """bksl-nl INSERT INTO Videoprojecteur (salle, marquepy-undvideo, modelepy-undvideo, tni)bksl-nl VALUESbksl-nl ("012", "Epson", "xb27", 1),bksl-nl ("114", "Sanyo", "PLV-Z3", 0),bksl-nl ("223", "Optoma", "HD143X", 0),bksl-nl ("225", "Optoma", "HD143X", 1)bksl-nl """bksl-nl )bksl-nl base.commit()bksl-nl return curseurbksl-nlbksl-nlbksl-nlcurseur = initialisationpy-undbasepy-unddepy-unddonnee()bksl-nlbksl-nlbksl-nldef executepy-undrequete(requete: str) -> list:bksl-nl curseur.execute(requete)bksl-nl return curseur.fetchall()bksl-nlbksl-nlbksl-nlrequete1 = executepy-undrequete("SELECT salle, marquepy-undordi FROM Ordinateur")bksl-nlbksl-nlrequete2 = executepy-undrequete("SELECT nompy-undordi, salle FROM Ordinateur WHERE video = 1")bksl-nlbksl-nlrequete3 = executepy-undrequete(bksl-nl "SELECT py-str from Ordinateur WHERE annee >= 2017 ORDER BY annee ASC"bksl-nl)bksl-nlbksl-nlrequete4 = executepy-undrequete(bksl-nl """bksl-nl SELECT nompy-undimprimante, salle, Ordinateur.nompy-undordibksl-nl FROM Imprimantebksl-nl JOIN Ordinateur ON Imprimante.nompy-undordi = Ordinateur.nompy-undordibksl-nl"""bksl-nl)bksl-nlbksl-nlrequete5 = executepy-undrequete(bksl-nl """bksl-nl INSERT INTO Videoprojecteur (salle, marquepy-undvideo, modelepy-undvideo, tni)bksl-nl VALUES ("315", "NEC", "ME402X", 0)bksl-nl"""bksl-nl)bksl-nlbksl-nlassert sorted(requete1) == [bksl-nl ("012", "HP"),bksl-nl ("114", "Lenovo"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl ("223", "Dell"),bksl-nl]bksl-nlassert sorted(requete2) == [bksl-nl ("Gen-24", "012"), ("Tech-62", "114"), ("Gen-132", "223")bksl-nl]bksl-nlassert sorted(requete3) == [bksl-nl ("Gen-132", "223", "Dell", "Insipiron Compact", 2019, 1),bksl-nl ("Gen-133", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl ("Gen-134", "223", "Dell", "Insipiron Compact", 2019, 0),bksl-nl]bksl-nlassert sorted(requete4) == [bksl-nl ("imppy-undBTSpy-undCouleur", "114", "Tech-62"),bksl-nl ("imppy-undBTSpy-undNB", "114", "Tech-62"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-132"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-133"),bksl-nl ("imppy-undsalle-info1", "223", "Gen-134"),bksl-nl]bksl-nlassert executepy-undrequete("SELECT py-str FROM Videoprojecteur WHERE salle = '315'") == [bksl-nl ("315", "NEC", "ME402X", 0)bksl-nl]bksl-nlbksl-nl

A

Z

Retour en haut de la page