Démarrer SQLite Utilisation d`une base de données

publicité
Lycée Carnot - Dijon
MPSI 3
Dans emacs comme dans le terminal, les raccourcis habituels pour le copier-coller ne
fonctionnent pas non plus. Vous utiliserez les raccourcis standards unix :
TP DÉCOUVERTE DE SQL ITE
•
ctrl
+
insert
: copier,
•
Maj
+
insert
: coller,
•
Maj
+
suppr
: couper.
Démarrer SQLite
Création des tables
En salle de TP, nous allons utiliser SQLite (prononcer SQL-Lite). C’est une application qui
permet de gérer une base de donnée sans utiliser d’architecture client-serveur : tout se passe
sur place et les bases de données sont stockées dans des fichiers sur la machine.
La syntaxe SQL pour créer des tables est la suivante (attention : n’utilisez pas de tabulations mais des espaces !) :
Tout va se passer en ligne de commande. Pour lancer SQLite sur un fichier, il faut utiliser
la commande 1 :
sqlite3 -column -header [chemin_eventuel\]nom_fichier.sqlite
L’option -column permet d’afficher les tables sous forme de tableaux, et l’option -header
permet d’afficher des en-têtes de colonnes 2 .
Si le fichier n’existe pas, il est créé directement.
); -- Ne pas oublier le point-virgule !
BSi
une clé primaire contient plusieurs attributs, il faut la déclarer à part avec
PRIMARY KEY (att_1, ..., att_n).
Créer, sur le même modèle, les tables personne, eleve, classe, prof et enseigne.
Vérifier avec .tables qu’elles sont bien créées.
Tester la commande .schema
Le shell de sqlite se présente alors à vous avec l’invite sqlite> . Les commande se
tapent directement : les commandes SQL doivent se terminer par ; et les commande sqlite
commencent par un point. .help permet de connaître les principales. Par exemple, .exit
permet de quitter sqlite, .tables permet de voir toutes les tables de la base, .databases
permet de voir toutes les bases de données connues.
On peut supprimer une table grâce à la commande
DROP TABLE nom_table; /* Bien réfléchir avant de l’utiliser !! */
Les commandes SQL peuvent se taper directement (bien finir la ligne par un ;) ou être
importées depuis un fichier grâce à la commande :
CREATE TABLE eleve (
num_p
INTEGER PRIMARY KEY REFERENCES personne(num_p),
num_etudiant
INTEGER ,
lycee_origine
TEXT,
num_classe
INTEGER REFERENCES classe(no)
sqlite> .read [chemin_eventuel\]nom_fichier.sql
Peuplement des tables
Pour peupler nos tables, on procède de la manière suivante :
Utilisation d’une base de données
Nous allons créer la base de donnée lycee.sqlite sur le modèle étudier en cours :
taper sqlite3 -column -header lycee.sqlite dans un terminal.
Nous enregistrerons au fur et à mesure les commandes SQL dans un fichier lycee.sql.
On pourra choisir emacs comme éditeur de texte avec coloration syntaxique : taper simplement emacs lycee.sql dans un autre terminal (ou mieux : nouvel onglet avec ctrl +
Maj + T ).
Attention les raccourcis habituels ne fonctionnent pas sous emacs. Par exemple, pour
sauver : ctrl + X puis ctrl + S .
1. Se déplacer dans son dossier de travail pour éviter les chemins et faciliter les choses
2. Changeable dans sqlite directement avec .header on et .mode column.
TP découverte de SQLite - page 1
INSERT INTO personne VALUES (6275,’Dupont’,’Pierre’,’0645456789’);
Peupler toutes les tables sur ce même principe.
Vérifier au fur et à mesure avec
SELECT * FROM nom_table;
On peut supprimer des tuples dans une table avec une commande de la forme :
DELETE FROM nom_table WHERE condition;
On peut modifier des tuples dans une table avec une commande de la forme :
UPDATE nom_table SET attr_1 = val_1, ..., attr_n = val_n
WHERE condition;
TP découverte de SQLite - page 2
Interrogation de la base de données
Vous pouvez maintenant utiliser des requêtes SQL pour interroger votre base de donnée.
Par exemple, pour chercher quels sont les noms et prénoms des élèves de MP* :
SELECT p.nom, p.prenom
FROM
eleve e JOIN personne p ON e.num_p = p.num_p
JOIN classe c
ON e.num_classe = c.no
WHERE c.nom = ’MP*’;
ou encore
SELECT
FROM
WHERE
AND
AND
7. Donner le nom et prénom des élèves et des professeurs de MPSI 3.
8. Donner le nom et le prénom des élèves ayant le même prénom qu’un de leurs professeurs.
9. Donner le nom des élèves ayant un professeur avec moins de 15 ans d’ancienneté.
10. Donner le nom et la matière des professeurs enseignant dans une classe dont ils ne
sont pas professeur principal.
p.nom, p.prenom
eleve e, personne p, classe c
e.num_p = p.num_p
e.num_classe = c.no
c.nom = ’MP*’;
ce qui donne :
nom
---------Galois
prenom
---------Evariste
On précédera toutes les requêtes par leur
intitulé en français placé en commentaire
dans le fichier lycee.sql.
Écrire en SQL les requêtes suivantes.
1. Donner le nom et le numéro de téléphone de toutes les personnes enregistrées et
qui ont bien un numéro de téléphone.
2. Donner le nom et le numéro de téléphone de tous les élèves.
Voici, par exemple, une autre possibilité :
SELECT nom, tel
FROM personne
WHERE num_p IN (SELECT num_p FROM eleve);
3. Donner le nom et le prénom de tous les élèves dont le nom de la classe contient ’SI’.
4. Donner d’au moins trois autres façons différentes le nom et le prénom de tous les
élèves de sup.
5. Y a-t-il une classe dont l’effectif est l’ancienneté d’un de ses professeurs ? Le double ?
Si oui, quel est le nom du professeur ?
6. Déterminer les couples d’élèves venant d’un même lycée.
TP découverte de SQLite - page 3
TP découverte de SQLite - page 4
Téléchargement