Skip to content
Snippets Groups Projects
Commit c4a281ad authored by Joel Cavat's avatar Joel Cavat
Browse files

Add sqlite db

parent a0792236
Branches
No related tags found
No related merge requests found
...@@ -73,8 +73,8 @@ res = [ s.lastname for s in students if s.age >= 18 ] ...@@ -73,8 +73,8 @@ res = [ s.lastname for s in students if s.age >= 18 ]
### Semaine 6 - 29 mars et 1 avril :hatching_chick: ### Semaine 6 - 29 mars et 1 avril :hatching_chick:
- programme planifié - [alg] chapitre 1
- [alg] chapitre 1 - [alg] exercices 1.2, 1.3, 1.4 et 1.5 (version 1) (**à terminer pour la prochaine fois**)
### Semaine 7 ### Semaine 7
......
# SQLITE 3.38
## Prérequis
- Dernière version sqlite 3.38
## Resources
- https://www.sqlite.org/
- https://www.sqlitetutorial.net
- https://www.tutorialspoint.com/sqlite
## Démarrer sqlite
```bash
~$ sqlite3
SQLite version 3.38.2 2022-03-26 13:51:10
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
```
puis, configurer **à chaque fois** les instructions suivantes pour avoir des contraintes strictes et pour forcer l'emploi des clés étrangères
```bash
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA strict = ON;
sqlite> .mode column
sqlite> .headers on
```
enfin, pour un peu de cosmétique afin de mieux lire le résultat des requêtes
```bash
sqlite> .mode column
sqlite> .headers on
```
### Ouvrir ou créer une base de données
```bash
sqlite> .open test.db
```
### Exécuter un script sql
```bash
sqlite> .read monscript.sql
```
### Autres commandes
```bash
sqlite> .tables # liste les tables
sqlite> .fullschema # liste les schémas détaillés des tables
sqlite> .schema Conference # liste le schéma d'une table spécifique
sqlite> ATTACH conf.db as conference # Utiliser une base de données
sqlite> DETACH conference # Fermer une base de données
```
# Création d'une base de données
## Création d'un table
```sql
CREATE TABLE Test (
i INTEGER NOT NULL PRIMARY KEY,
t TEXT NOT NULL,
r REAL
)
```
## Création d'un table avec contraintes
```sql
CREATE TABLE Test (
i INTEGER NOT NULL PRIMARY KEY,
j INTEGER NOT NULL,
k INTEGER NOT NULL,
CHECK (j > 0 && j < 100),
UNIQUE (j,k),
FOREIGN KEY (k) REFERENCES Table(k)
);
```
## Suppression d'une table avec ses enregistrements
```sql
DROP TABLE Test;
```
## Trigger
- https://www.sqlite.org/lang_createtrigger.html
- https://www.sqlitetutorial.net/sqlite-trigger/
### Syntaxe générale
```sql
CREATE TRIGGER [IF NOT EXISTS] trigger_name
[BEFORE|AFTER|INSTEAD OF] [INSERT|UPDATE|DELETE]
ON table_name
[WHEN condition]
BEGIN
statements;
END;
```
Suppression
```sql
DROP TRIGGER trigger_name;
```
### Exemple 1
L'insertion est possible si la valeur de l'attribut `j` du nouvel enregistrement n'existe pas dans la table `Table`.
```sql
CREATE TRIGGER trigger_name BEFORE INSERT ON Test
BEGIN
SELECT
CASE WHEN NEW.j IN (SELECT j FROM Table) THEN RAISE(ABORT, 'valid')
END;
END;
```
`RAISE` est une fonction.
ce trigger réalise exactement la même chose
```sql
CREATE TRIGGER trigger_name BEFORE INSERT ON Test WHEN NEW.i == 10
BEGIN
SELECT
Raise(ABORT, 'valid');
END;
```
### Exemple 2
CREATE TRIGGER trigger_name BEFORE UPDATE ON Test
BEGIN
INSERT INTO Log VALUES (NEW.i, OLD.i);
END;
# View
Une vue est un moyen d'enregistrer une requête dans une base de données. Elle peut être ensuite accessible aux utilisatateurs de la base.
Elle permette de cacher la complexité d'une requête ou de réduire la visibilité de certains champs.
## Syntaxe
Crétation
```sql
CREATE [TEMP] VIEW [IF NOT EXISTS] view_name[(column-name-list)]
AS
select-statement;
```
Suppression
```sql
DROP VIEW view_name;
```
## Exemple
```sql
CREATE VIEW IF NOT EXISTS conf_price
AS SELECT id_conference, price FROM Conference;
...
SELECT * FROM conf_price;
```
ou
```sql
CREATE VIEW IF NOT EXISTS conf_price(id, price, topic)
AS SELECT id_conference, price, title FROM Conference;
...
SELECT id, topic FROM conf_price;
```
File added
PRAGMA foreign_keys = ON;
PRAGMA strict = ON;
.mode column
.headers on
.open chinook.db
creer la bd ou ouvre la bd
PRAGMA foreign_keys = ON;
.open conf.db
peuple en lisant le script
.read conf.sqlite.sql
.schema albums
.fullschema
File added
.mode column
.headers on
PRAGMA foreign_keys = ON;
CREATE TABLE Topic (
title TEXT NOT NULL PRIMARY KEY
);
INSERT INTO Topic (title) VALUES
('blockchain'),
('cloud'),
('databases'),
('lambda calculus'),
('microservices');
CREATE TABLE Conference (
id_conference INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
start_date TEXT NOT NULL,
end_date TEXT NOT NULL,
price NUMERIC NOT NULL,
title TEXT NOT NULL,
FOREIGN KEY (title) REFERENCES Topic(title)
);
INSERT INTO Conference (id_conference, name, start_date, end_date, price, title) VALUES
(1, 'Scala Days 2016', '2016-06-01', '2016-06-03', 800, 'microservices'),
(2, 'Scala Days 2017', '2017-05-14', '2017-05-16', 850, 'databases'),
(3, 'Devoxx', '2017-08-04', '2017-08-04', 550, 'blockchain'),
(4, 'Lambda Days', '2019-02-03', '2019-02-04', 150, 'lambda calculus'),
(5, 'CurryOn', '2019-03-03', '2019-03-07', 400, 'databases');
CREATE TABLE Visitor (
login TEXT NOT NULL PRIMARY KEY,
firstname TEXT NOT NULL,
lastname NOT NULL
);
INSERT INTO Visitor (login, firstname, lastname) VALUES
('agillibrandc', 'Alfonso', 'Gillibrand'),
('apendockq', 'Adela', 'Pendock'),
('asustin1d', 'Alair', 'Sustin'),
('bgliddery', 'Banky', 'Glidder'),
('bscroxton1', 'Bessy', 'Scroxton'),
('bstempg', 'Burg', 'Stemp'),
('cbalassaj', 'Corey', 'Balassa'),
('ciliffeb', 'Chancey', 'Iliffe'),
('clavignew', 'Calvin', 'La Vigne'),
('dfoden12', 'Dieter', 'Foden'),
('ebirtle17', 'Elisa', 'Birtle'),
('ekeasey15', 'Esme', 'Keasey'),
('elidgeye', 'Esteban', 'Lidgey'),
('eshierr', 'Emlynne', 'Shier'),
('esoggx', 'Ewen', 'Sogg'),
('etowllo', 'Emmanuel', 'Towll'),
('ggrigolond', 'Geraldine', 'Grigolon'),
('gloadwickt', 'Granville', 'Loadwick'),
('gmattiazzi18', 'Georgetta', 'Mattiazzi'),
('gmcspirronv', 'Gerrilee', 'McSpirron'),
('hasaaf11', 'Harper', 'Asaaf'),
('hcoldrickm', 'Harriet', 'Coldrick'),
('hlarway1b', 'Hilario', 'Larway'),
('hweymouth9', 'Heath', 'Weymouth'),
('hwyonl', 'Hagen', 'Wyon'),
('jtowheyi', 'Julianna', 'Towhey'),
('kburnip10', 'Kacy', 'Burnip'),
('kcove16', 'Karissa', 'Cove'),
('kironsu', 'Kira', 'Irons'),
('kwinterbourne1a', 'Kenn', 'Winterbourne'),
('lambrosini0', 'Lilly', 'Ambrosini'),
('lclewa', 'Loren', 'Clew'),
('mbraggintonf', 'Mag', 'Bragginton'),
('memeneyk', 'Maddie', 'Emeney'),
('mgodbold19', 'Mario', 'Godbold'),
('mmattia6', 'Modestia', 'Mattia'),
('mtackettn', 'Mallorie', 'Tackett'),
('ocoutts13', 'Oona', 'Coutts'),
('pbennallck4', 'Percy', 'Bennallck'),
('pmunsey3', 'Phillie', 'Munsey'),
('ptrinder5', 'Petrina', 'Trinder'),
('rjizhakip', 'Roth', 'Jizhaki'),
('rmanueli8', 'Richmond', 'Manueli'),
('scullip1c', 'Sande', 'Cullip'),
('sdundridge2', 'Sawyere', 'Dundridge'),
('skonkeh', 'Starla', 'Konke'),
('ssiveyers', 'Susanne', 'Siveyer'),
('stregunna14', 'Sven', 'Tregunna'),
('tdwerryhouse7', 'Tanner', 'Dwerryhouse'),
('wmontfortz', 'Windy', 'Montfort');
CREATE TABLE Fidelity (
login TEXT NOT NULL PRIMARY KEY,
loyalty_points INTEGER NOT NULL,
FOREIGN KEY(login) REFERENCES Visitor(login)
);
INSERT INTO Fidelity VALUES
('agillibrandc',50),
('hweymouth9', 100),
('lambrosini0', 100),
('ocoutts13', 40),
('rmanueli8', 250),
('wmontfortz', 30);
CREATE TABLE Hotel (
id_hotel INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
address TEXT NOT NULL,
city TEXT NOT NULL
);
INSERT INTO Hotel (id_hotel, `name`, address, city) VALUES
('1', 'Luxurious Hotel City', 'Joachimstaler Str. 4', 'Berlin'),
('2', 'Hotel SuperStar', 'Flughafenstrasse 88', 'Berlin'),
('3', 'Centrum Hotel', 'ul. Polarna 141', 'Krakow'),
('4', 'Hotel Ibis', '15 Rue Joseph Vernet', 'Lausanne'),
('5', 'Rolex Hotel', '92 boulevard Amiral Courbet', 'Lausanne'),
('6', 'Hotel Cornavin', 'Boulevard de Cornavin 22', 'Genève');
CREATE TABLE Speaker (
login TEXT NOT NULL PRIMARY KEY,
firstname TEXT NOT NULL,
lastname TEXT NOT NULL
);
INSERT INTO Speaker (login, firstname, lastname) VALUES
('amalyon0', 'Aluin', 'Malyon'),
('bagius3', 'Blair', 'Agius'),
('bmeenan2', 'Barty', 'Meenan'),
('carrell6', 'Cam', 'Arrell'),
('cbaszniak8', 'Candie', 'Baszniak'),
('djurgensone', 'Duncan', 'Jurgenson'),
('fbaakeb', 'Flora', 'Baake'),
('gmcspirronv', 'Gerrilee', 'McSpirron'),
('gyeoc', 'Georgena', 'Yeo'),
('kgatlin1', 'Katharine', 'Gatlin'),
('kredan4', 'Kelley', 'Redan'),
('lambrosini0', 'Lilly', 'Ambrosini'),
('mfokerd', 'Merilee', 'Foker'),
('mhartfield7', 'Marcile', 'Hartfield'),
('pcroysdale9', 'Preston', 'Croysdale'),
('prulera', 'Patrizius', 'Ruler'),
('stregunna14', 'Sven', 'Tregunna'),
('zjordan5', 'Zorana', 'Jordan');
CREATE TABLE Participation (
login TEXT NOT NULL,
id_conference INTEGER UNSIGNED NOT NULL,
signatureDate TEXT NOT NULL,
fees NUMERIC NOT NULL,
PRIMARY KEY (login, id_conference),
FOREIGN KEY (login) REFERENCES Speaker(login),
FOREIGN KEY (id_conference) REFERENCES Conference(id_conference)
);
INSERT INTO Participation (login, id_conference, signatureDate, fees) VALUES
('amalyon0', 1, '2017-05-23', 0),
('amalyon0', 2, '2017-02-04', 500),
('bagius3', 1, '2016-04-11', 2500),
('bagius3', 2, '2017-03-01', 0),
('bagius3', 5, '2018-12-01', 500),
('bmeenan2', 1, '2016-03-06', 1000),
('bmeenan2', 4, '2016-04-14', 3000),
('bmeenan2', 5, '2016-03-26', 3000),
('carrell6', 1, '2016-03-18', 3000),
('carrell6', 2, '2017-04-27', 0),
('carrell6', 3, '2016-03-31', 500),
('cbaszniak8', 2, '2017-03-31', 2500),
('cbaszniak8', 4, '2017-05-01', 1000),
('cbaszniak8', 5, '2017-05-20', 500),
('djurgensone', 3, '2017-07-21', 1000),
('djurgensone', 4, '2016-04-10', 2500),
('djurgensone', 5, '2019-01-10', 2000),
('fbaakeb', 1, '2017-02-18', 1500),
('fbaakeb', 2, '2017-03-07', 2000),
('fbaakeb', 4, '2018-11-07', 500),
('fbaakeb', 5, '2019-01-22', 1000),
('gmcspirronv', 1, '2016-04-07', 1000),
('gmcspirronv', 2, '2017-07-15', 2500),
('gmcspirronv', 3, '2017-02-16', 3000),
('gmcspirronv', 5, '2018-12-20', 1000),
('gyeoc', 1, '2018-11-13', 2000),
('gyeoc', 2, '2017-04-23', 0),
('gyeoc', 4, '2016-04-14', 3000),
('gyeoc', 5, '2018-12-20', 1500),
('kgatlin1', 1, '2016-03-04', 2500),
('kgatlin1', 3, '2017-07-24', 3000),
('kgatlin1', 4, '2019-01-19', 2000),
('kgatlin1', 5, '2017-07-15', 500),
('kredan4', 2, '2017-05-19', 2000),
('lambrosini0', 3, '2017-05-09', 2000),
('mfokerd', 1, '2018-12-08', 1500),
('mfokerd', 3, '2017-04-24', 0),
('mfokerd', 5, '2019-02-17', 0),
('mhartfield7', 2, '2017-04-17', 3000),
('pcroysdale9', 2, '2017-04-13', 0),
('pcroysdale9', 3, '2019-02-10', 1000),
('pcroysdale9', 4, '2018-11-06', 2000),
('stregunna14', 2, '2017-04-29', 2000),
('stregunna14', 3, '2017-05-10', 0),
('stregunna14', 4, '2018-12-13', 500),
('stregunna14', 5, '2017-03-01', 2000),
('zjordan5', 2, '2017-04-15', 0),
('zjordan5', 3, '2017-05-06', 0);
CREATE TABLE Registration (
login TEXT NOT NULL,
id_conference INTEGER NOT NULL,
PRIMARY KEY (login, id_conference),
FOREIGN KEY (login) REFERENCES Visitor(login),
FOREIGN KEY (id_conference) REFERENCES Conference(id_conference)
);
INSERT INTO Registration (login, id_conference) VALUES
('agillibrandc', 1),
('apendockq', 1),
('asustin1d', 1),
('bscroxton1', 1),
('bstempg', 1),
('ekeasey15', 1),
('eshierr', 1),
('ggrigolond', 1),
('gloadwickt', 1),
('gmcspirronv', 1),
('hcoldrickm', 1),
('hlarway1b', 1),
('jtowheyi', 1),
('kburnip10', 1),
('kironsu', 1),
('kwinterbourne1a', 1),
('lambrosini0', 1),
('lclewa', 1),
('mbraggintonf', 1),
('memeneyk', 1),
('mgodbold19', 1),
('mmattia6', 1),
('pbennallck4', 1),
('ptrinder5', 1),
('rmanueli8', 1),
('scullip1c', 1),
('sdundridge2', 1),
('skonkeh', 1),
('stregunna14', 1),
('tdwerryhouse7', 1),
('bscroxton1', 2),
('ciliffeb', 2),
('elidgeye', 2),
('etowllo', 2),
('ggrigolond', 2),
('gmcspirronv', 2),
('hweymouth9', 2),
('hwyonl', 2),
('jtowheyi', 2),
('kburnip10', 2),
('kcove16', 2),
('kironsu', 2),
('lambrosini0', 2),
('memeneyk', 2),
('mgodbold19', 2),
('mmattia6', 2),
('mtackettn', 2),
('ocoutts13', 2),
('pbennallck4', 2),
('pmunsey3', 2),
('ptrinder5', 2),
('rjizhakip', 2),
('rmanueli8', 2),
('ssiveyers', 2),
('tdwerryhouse7', 2),
('agillibrandc', 3),
('bgliddery', 3),
('bscroxton1', 3),
('bstempg', 3),
('cbalassaj', 3),
('ciliffeb', 3),
('dfoden12', 3),
('ebirtle17', 3),
('ekeasey15', 3),
('eshierr', 3),
('etowllo', 3),
('ggrigolond', 3),
('hcoldrickm', 3),
('hlarway1b', 3),
('hweymouth9', 3),
('hwyonl', 3),
('kburnip10', 3),
('kwinterbourne1a', 3),
('lclewa', 3),
('memeneyk', 3),
('mgodbold19', 3),
('skonkeh', 3),
('ssiveyers', 3),
('stregunna14', 3),
('agillibrandc', 4),
('apendockq', 4),
('asustin1d', 4),
('bscroxton1', 4),
('bstempg', 4),
('cbalassaj', 4),
('clavignew', 4),
('dfoden12', 4),
('ebirtle17', 4),
('eshierr', 4),
('gmattiazzi18', 4),
('hasaaf11', 4),
('hlarway1b', 4),
('hweymouth9', 4),
('kburnip10', 4),
('mtackettn', 4),
('ocoutts13', 4),
('pmunsey3', 4),
('rmanueli8', 4),
('scullip1c', 4),
('sdundridge2', 4),
('ssiveyers', 4),
('asustin1d', 5),
('bscroxton1', 5),
('bstempg', 5),
('clavignew', 5),
('dfoden12', 5),
('ekeasey15', 5),
('elidgeye', 5),
('eshierr', 5),
('ggrigolond', 5),
('gmattiazzi18', 5),
('gmcspirronv', 5),
('hlarway1b', 5),
('jtowheyi', 5),
('kcove16', 5),
('kironsu', 5),
('lambrosini0', 5),
('mgodbold19', 5),
('ocoutts13', 5),
('pmunsey3', 5),
('rjizhakip', 5),
('stregunna14', 5),
('tdwerryhouse7', 5);
CREATE TABLE Stay (
id_stay INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
login TEXT NOT NULL,
id_hotel INTEGER NOT NULL,
start_date TEXT NOT NULL,
end_date TEXT NOT NULL,
UNIQUE (login, start_date),
FOREIGN KEY (login) REFERENCES Speaker(login),
FOREIGN KEY (id_hotel) REFERENCES Hotel(id_hotel)
);
INSERT INTO Stay (login, id_hotel, start_date, end_date) VALUES
('cbaszniak8', '3', '2019-02-03', '2019-02-05'),
('lambrosini0', '6', '2017-08-04', '2017-08-05'),
('carrell6', '6', '2017-08-04', '2017-08-05'),
('bmeenan2', '3', '2019-02-03', '2019-02-05'),
('djurgensone', '5', '2019-03-03', '2019-03-05'),
('gmcspirronv', '6', '2017-08-04', '2017-08-06'),
('gyeoc', '1', '2016-06-01', '2016-06-03'),
('kgatlin1', '3', '2019-02-03', '2019-02-05'),
('fbaakeb', '4', '2019-03-03', '2019-03-05'),
('bagius3', '2', '2017-05-14', '2017-05-15'),
('pcroysdale9', '2', '2017-05-14', '2017-05-16'),
('djurgensone', '3', '2019-02-03', '2019-02-05'),
('gmcspirronv', '1', '2016-06-01', '2016-06-03'),
('gyeoc', '5', '2019-03-03', '2019-03-04'),
('bmeenan2', '1', '2016-06-01', '2016-06-03'),
('pcroysdale9', '3', '2019-02-03', '2019-02-04'),
('kgatlin1', '1', '2016-06-01', '2016-06-02'),
('cbaszniak8', '2', '2017-05-14', '2017-05-16'),
('bagius3', '4', '2019-03-03', '2019-03-04'),
('stregunna14', '6', '2017-08-04', '2017-08-05'),
('fbaakeb', '3', '2019-02-03', '2019-02-05'),
('djurgensone', '6', '2017-08-04', '2017-08-05'),
('mfokerd', '6', '2017-08-04', '2017-08-05'),
('fbaakeb', '1', '2017-05-14', '2017-05-16'),
('zjordan5', '2', '2017-05-14', '2017-05-16'),
('carrell6', '1', '2016-06-01', '2016-06-02'),
('pcroysdale9', '6', '2017-08-04', '2017-08-06'),
('carrell6', '2', '2017-05-14', '2017-05-16'),
('mhartfield7', '2', '2017-05-14', '2017-05-16'),
('kgatlin1', '5', '2019-03-03', '2019-03-05'),
('amalyon0', '1', '2016-06-01', '2016-06-02'),
('gmcspirronv', '2', '2017-05-14', '2017-05-15'),
('mfokerd', '2', '2016-06-01', '2016-06-03'),
('gyeoc', '3', '2019-02-03', '2019-02-05'),
('bmeenan2', '5', '2019-03-03', '2019-03-05'),
('zjordan5', '6', '2017-08-04', '2017-08-05'),
('stregunna14', '1', '2017-05-14', '2017-05-16'),
('kredan4', '2', '2017-05-14', '2017-05-16'),
('mfokerd', '4', '2019-03-03', '2019-03-04');
PRAGMA foreign_keys = ON;
.mode column
.headers on
.open conf.db
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment