Bases de Données - TP en Sqlite: SQL Procedural: PSM (Persistent Stored Module), Cli (Call Level Interface)
Bases de Données - TP en Sqlite: SQL Procedural: PSM (Persistent Stored Module), Cli (Call Level Interface)
Bibliographie
[1] Tutoriel d’installation de sqlite sous windows
https://www.sqlitetutorial.net/download-install-sqlite
[2] Documentation sqlite : sqlite :
www.sqlitetutorial.net
[3] Tutoriel de prise ne main de sqlite :
doc.ubuntu-fr.org/sqlite
[4] Tutoriel de SQL, en ligne autocorrigé mais en anglais :
w3schools.com
Le langage SQL
Le modèle relationnel de Codd a été rapidement admis comme modèle définitif pour
les bases de données. La première version de langage d'interrogation structuré
(SQL - Structured Query Language) a été développé chez IBM en 1970 par Donald
Chamberlain et Raymond Boyce. En 1979, Relational Software, Inc. (actuellement
Oracle Corporation) présenta la première version commercialement disponible de
SQL, rapidement imité par d'autres fournisseurs.
SQL se décompose en 5 parties, à savoir :
Ordres LDD (langage de définition des données, ou DDL, Data Definition
Language) : permet de modifier la structure de la base de données.
Ordres LMD (langage de manipulation des données, ou DML, Data Manipulation
Language) : permet de consulter / modifier le contenu de la base de données.
Ordres LCD (langage de contrôle des données, ou DCL, Data Control
Language) : permet de gérer les privilèges, c'est-à-dire les utilisateurs et les
actions qu'ils peuvent entreprendre.
Ordres LCT (langage de contrôle des transactions, ou TCL, Transaction
Control Language) : permet de gérer les transactions, c'est-à-dire rendre
atomique divers ordres enchaînés en séquence.
SQL procedural : PSM (Persistent Stored Module), CLI (Call Level Interface),
Embedded SQL, … qui est un ensemble d'outils pour que SQL s'interface avec
des langages hôtes.
Nous ne verrons ici que des exemples simples pour les deux premières parties
SQL et MYSQL
MySQL est un système de gestion de bases de données relationnelles (SGBDR). Il est
distribué sous une double licence libre (ou GPL pour General Public Licence) et
propriétaire. Il fait partie des logiciels de gestion de base de données les plus utilisés
au monde, autant par le grand public (applications web principalement) que par des
professionnels, en concurrence avec Oracle, Informix et Microsoft SQL Server.
MySQL est un serveur de bases de données relationnelles SQL. MySQL fonctionne
sur de nombreux systèmes d’exploitation différents, incluant Linux, Mac OS X et
Windows. Les bases de données sont accessibles en utilisant bons nombres de
OSLogi – BD TP 5TInfo – 03/2021 – V04 1
langages de programmation (C, PHP, Python …). MySQL fait partie du quatuor LAMP :
Linux, Apache, MySQL, PHP. Il appartient également à ses variantes WAMP
(Windows).
La plupart des SGBD comme MySQL sont basés sur un modèle client-serveur. C'est-à-
dire que la base de données se trouve sur un serveur qui ne sert qu'à ça, et pour
interagir avec cette base de données, il faut utiliser un logiciel "client" qui va
interroger le serveur et transmettre la réponse que le serveur lui aura donnée. Le
serveur peut être installé sur une machine différente du client ; c'est souvent le cas
lorsque les bases de données sont importantes.
Par conséquent, lorsqu'on installe un SGBD basé sur ce modèle, on installe en réalité
deux choses (au moins) : le serveur et le client. Chaque requête
(insertion/modification/lecture de données) est faite par l'intermédiaire du client.
Jamais, on ne discute directement avec le serveur mais par l'intermédiaire de
requête SQL.
Par contre, SQLite est une bibliothèque C qui implémente un moteur de base de
données sans serveur. Une base de données SQLite est implémenté par un simple
fichier. A l'heure actuelle, SQLite est l'un des moteurs de base de données les plus
simples à installer, à manipuler et à administrer, ce qui en fait un très bon candidat
pour l'utilisation dans un site web ou dans un smartphone.
sqlite3
Toute commande SQLite commence par un point « . » et sera précédé de son curseur
afin de bien distinguer les commandes SQLite des autres commandes.
Tu dois taper les commandes surlignées, les autres sont des explications
complémentaires
sqlite> .help
sqlite> .quit
.header on
OSLogi – BD TP 5TInfo – 03/2021 – V04 3
.mode column
.width 20 20 20 20 20
Exemple de résultat (obtenu après avoir tapé la commande 1.2.6 plus loin) :
Tu pourrais écrire ces commandes dans le terminal mais pour que les modifications
soient prises en compte à chaque démarrage, tu peux directement les écrire dans le
fichier .sqliterc sous /home/user.
cd
ls -la
gedit .sqliterc &
sqlite3 livres.db
Si la base livres.db n'existe pas déjà, elle sera créée (tu peux vérifier qu’un fichier
livres.db a bien est créé). Cette commande, non seulement crée ou ouvre la base, mais
place le curseur immédiatement dans l'environnement terminal de SQLite. Toute
commande tapée par la suite concernera cette base..
rm livres.db
sqlite> CREATE TABLE bandeDessinee (id int PRIMARY KEY, titre text, auteur text,
resume text, num real, datecreation int);
Si …> apparait après avoir tapé la commande, c'est qu'il manque tout simplement le ; à
la fin de la requête. Ajoute-le juste après le …>; et valide.
Les requêtes SQL sont tapées en MAJUSCULES.
Les variables sont tapées en minuscules ; si elles sont composées de plusieurs mots, on
peut les séparer par des « _ » ou mettre la 1ère lettre en majuscule (exemple :
bande_dessinee ou bandeDessinee)
Syntaxe de création d'une table
CREATE TABLE orders (
orderID int NOT NULL,
orderNumber int NOT NULL,
personID int,
PRIMARY KEY (orderID),
FOREIGN KEY (personID) REFERENCES persons (personID)
);
sqlite> .tables
sqlite> INSERT INTO bandeDessinee VALUES (1, 'Tintin au Congo', 'Hergé', 'Tintin est au
Congo.', 5.0, NULL);
sqlite> INSERT INTO bandeDessinee VALUES (2, 'le nid des marsupilamis', 'Franquin', 'Un
reportage incroyable', 6.0, date('now'));
sqlite> INSERT INTO bandeDessinee VALUES (3, 'la déesse', 'Moebius', 'une aventure
géniale', 7.0, strftime("%Y-%m-%d %H:%M:%S",'now','localtime'));
Résultat
Résultat
UPDATE nomTable
SET colone1=valeur1, colone2=valeur2, …
WHERE condition ;
mv livres.db livres_save.sb
sqlite> .tables
sqlite> .tables
sqlite> SELECT * FROM bd ;
Crée et ouvre un fichier films.sql dans lequel tu écriras les requêtes des questions
suivantes.
2. Ecris une requête pour créer la table Films avec la colonne f_id de type entier (en
tant que clé primaire) et la colonne titre de type texte (non null).
3. Ajoute à la table films les titres de films suivants, avec leurs clés respectives :
{(1, ‘‘Les évadés’’), (2, ‘‘Le parrain’’), (3, ‘‘La vie de Pi’’)}
4. Ecris une requête pour afficher tous les éléments de la table Films.
Résultat
1|Les évadés
2|Le parrain
3|La vie de Pi
6. Ecris une requête pour afficher tous les éléments de la table Films.
Résultat
1| Les évadés
2| Le parrain
3| La vie de Pi
4| Chocolat
5| Scarface
6|Rango
Résultat
Les évadés
Le parrain
La vie de Pi
Chocolat
Scarface
8. Crée et ouvre un fichier acteurs.sql dans lequel tu écriras les requêtes des
questions suivantes.
9. Ecris une requête pour créer la table acteurs avec la colonne a_id de type entier
(en tant que clé primaire) et les colonnes nom et prenom de types texte (non null).
11. Ecris une requête qui permet de lister le nom des acteurs.
Résultat
Deep
Pacino
Sharma
12. Crée et ouvre un fichier filmographie.sql dans lequel tu écriras les requêtes des
questions suivantes.
Pense à vérifier que les enregistrements sont bien dans chacune des tables.
a_id nom
1 Johnny Deep
2 Al Pacino
3 Suraj Sharma
4 Brad Pitt
.read tp3_create.sql
.tables
.read tp3_insert.sql
SELECT
*
FROM
films;
SELECT
*
FROM
filmographie;
L’idée est ici de joindre les 3 tables dans la même requête par le code suivant :
sqlite>
SELECT
a_id
FROM
acteurs
WHERE
nom = 'Johnny Deep';
sqlite> 1
sqlite >
SELECT
titre
FROM
films, filmographie
WHERE
f_id=fg_fk_film_id
AND fg_fk_acteur_id =1;
sqlite> Chocolat
Rango
SELECT
titre
FROM
films, filmographie
WHERE
f_id=fg_fk_film_id
AND fg_fk_acteur_id = (SELECT
a_id
FROM
acteurs
WHERE
nom = 'Johnny Deep');
3. (*) La liste de tous les films réalisés par le réalisateur du film “Le parrain”.
La requête ne doit pas contenir le nom de ce réalisateur.
4. La liste des films qui commencent par la chaîne de caractères “Le” ou contiennent
la chaîne de caractères “de”.
5. La liste des films ordonnée par année de réalisation, dans l’ordre descendant.
7. La liste des noms d’acteurs qui n’ont joué dans aucun film.
8. La liste des noms d’acteurs ayant joué dans au moins dans un film avec la moyenne
des salaires qu’ils ont touché sur tous leurs films. Nomme la colonne “Moyenne”.
Exemple : Si Johnny Deep a joué dans 2 films, et a touché 2 salaires s 1 et s2, la
moyenne sera (s1+s2)/2.
9. La liste des paires d’acteurs ayant le même salaire. Une paire d’acteurs ne doit pas
se trouver deux fois dans ton résultat.
10. Les salaires dans la base de données sont en dollars. Afficher ces salaires en
dirhams. 1 dollar coûte aux environs de 9 dirhams.
date de téléphon no
nom prénom sexe adresse ville canton
naissance e postal
Ochon Paul H 1995-08-08 324661155 Place des Peupliers 3 2900 Porrentruy JU