tp1
18
bdd.md
18
bdd.md
@@ -5,16 +5,16 @@
|
||||
Les thèmes recommandés à développer pour atteindre les acquis d'apprentissage visés sont :
|
||||
|
||||
- Bases de données :
|
||||
- Introduction aux bases de données relationnelles ;
|
||||
- Tables, schémas relationnels ;
|
||||
- Requêtes SQL de base ;
|
||||
- Base de données noSQL.
|
||||
- [X] Introduction aux bases de données relationnelles ;
|
||||
- [X] Tables, schémas relationnels ;
|
||||
- [X] Requêtes SQL de base ;
|
||||
- [ ] Base de données noSQL.
|
||||
- Introduction à l'IoT :
|
||||
- Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
|
||||
- Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
|
||||
- Gestion de la qualité de service (QoS) ;
|
||||
- Notions d'API (déclaration, appel de services) ;
|
||||
- Tableau de bord (node-red, grafana...).
|
||||
- [ ] Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
|
||||
- [ ] Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
|
||||
- [ ] Gestion de la qualité de service (QoS) ;
|
||||
- [ ] Notions d'API (déclaration, appel de services) ;
|
||||
- [ ] Tableau de bord (node-red, grafana...).
|
||||
|
||||
### Volume horaire
|
||||
|
||||
|
||||
56
draft.md
56
draft.md
@@ -5,3 +5,59 @@ OFFSET 0 revient à omettre la clause OFFSET, tout comme OFFSET avec un argument
|
||||
L'optimiseur de requêtes prend en compte LIMIT lors de la génération des plans de requête, vous obtiendrez donc très probablement différents plans (générant différents ordres de lignes) en fonction de ce que vous donnez pour LIMIT et OFFSET. Ainsi, l'utilisation de différentes valeurs LIMIT/OFFSET pour sélectionner différents sous-ensembles d'un résultat de requête donnera des résultats incohérents à moins que vous n'appliquiez un classement prévisible des résultats avec ORDER BY. Ce n'est pas un bug; c'est une conséquence inhérente du fait que SQL ne promet pas de fournir les résultats d'une requête dans un ordre particulier à moins que ORDER BY ne soit utilisé pour contraindre l'ordre.
|
||||
|
||||
Les lignes ignorées par une clause OFFSET doivent toujours être calculées à l'intérieur du serveur ; par conséquent, un OFFSET important pourrait être inefficace.
|
||||
|
||||
|
||||
|
||||
### Exercice 3. système de maintenance
|
||||
|
||||
Une société possède un parc de machine. Ces machines sont placés dans des ateliers et les ateliers appartiennent à des sites (lieux) de fabrication.
|
||||
|
||||
Une machine est caractérisée par sa marque et sa date d'achat.
|
||||
|
||||
Les opérations de maintenance sont des cycles d'opérations à effectuer régulièrement sur une machine.
|
||||
|
||||
Des opérateurs conduisent ces opérations et notent les résultats.
|
||||
|
||||
___
|
||||
|
||||
### Exercice 4. ERP (Enterprise resource planning)
|
||||
|
||||
Uns société achète des articles pour fabriquer des produits finis.
|
||||
|
||||
Un entrepôt permet de stocker à la fois les articles et les produits finis.
|
||||
|
||||
Les produits finis sont créés à partir des articles suivant une gamme de fabrication.
|
||||
|
||||
*****
|
||||
Articles Produits Finis Gamme de fabrication Production Stockage
|
||||
Nom Nom Nom Article Produit Fini Article
|
||||
Prix d'achat Prix vente Nom Produit Fini Quantite Produit f
|
||||
Quantité Date
|
||||
|
||||
******
|
||||
Produit Gamme de fabrication Production Stockage
|
||||
Nom Produit Produit Produit
|
||||
Prix Produit Quantité Quantité
|
||||
fini (o/n) Quantité Date
|
||||
|
||||
Activer les contraintes dans SQLite
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
vous ne pouvez pas ajouter directement une contrainte de clé primaire à une table existante dans SQLite après sa création. Contrairement à certaines autres bases de données relationnelles, SQLite ne permet pas de modifier une table pour ajouter ou supprimer des contraintes de clé primaire après que la table a été créée.
|
||||
|
||||
- 1. Créez la nouvelle table avec la contrainte de clé primaire
|
||||
CREATE TABLE new_table (
|
||||
id INTEGER PRIMARY KEY,
|
||||
column1 TEXT,
|
||||
column2 INTEGER
|
||||
);
|
||||
|
||||
-- 2. Copiez les données de l'ancienne table vers la nouvelle
|
||||
INSERT INTO new_table (id, column1, column2)
|
||||
SELECT id, column1, column2 FROM old_table;
|
||||
|
||||
-- 3. Supprimez l'ancienne table
|
||||
DROP TABLE old_table;
|
||||
|
||||
-- 4. Renommez la nouvelle table avec le nom de l'ancienne table
|
||||
ALTER TABLE new_table RENAME TO old_table;
|
||||
|
||||
179
td1.md
179
td1.md
@@ -70,56 +70,139 @@ Amélioration 2 : Suvant l'age et le permis des visites médicales périodiques
|
||||
|
||||
___
|
||||
|
||||
### Exercice 3. système de maintenance
|
||||
|
||||
Une société possède un parc de machine. Ces machines sont placés dans des ateliers et les ateliers appartiennent à des sites (lieux) de fabrication.
|
||||
|
||||
Une machine est caractérisée par sa marque et sa date d'achat.
|
||||
|
||||
Les opérations de maintenance sont des cycles d'opérations à effectuer régulièrement sur une machine.
|
||||
|
||||
Des opérateurs conduisent ces opérations et notent les résultats.
|
||||
|
||||
___
|
||||
|
||||
### Exercice 4. ERP (Enterprise resource planning)
|
||||
|
||||
Uns société achète des articles pour fabriquer des produits finis.
|
||||
|
||||
Un entrepôt permet de stocker à la fois les articles et les produits finis.
|
||||
|
||||
Les produits finis sont créés à partir des articles suivant une gamme de fabrication.
|
||||
|
||||
*****
|
||||
Articles Produits Finis Gamme de fabrication Production Stockage
|
||||
Nom Nom Nom Article Produit Fini Article
|
||||
Prix d'achat Prix vente Nom Produit Fini Quantite Produit f
|
||||
Quantité Date
|
||||
|
||||
******
|
||||
Produit Gamme de fabrication Production Stockage
|
||||
Nom Produit Produit Produit
|
||||
Prix Produit Quantité Quantité
|
||||
fini (o/n) Quantité Date
|
||||
|
||||
Activer les contraintes dans SQLite
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
vous ne pouvez pas ajouter directement une contrainte de clé primaire à une table existante dans SQLite après sa création. Contrairement à certaines autres bases de données relationnelles, SQLite ne permet pas de modifier une table pour ajouter ou supprimer des contraintes de clé primaire après que la table a été créée.
|
||||
|
||||
- 1. Créez la nouvelle table avec la contrainte de clé primaire
|
||||
CREATE TABLE new_table (
|
||||
id INTEGER PRIMARY KEY,
|
||||
column1 TEXT,
|
||||
column2 INTEGER
|
||||
```sql
|
||||
create table entrepot (
|
||||
id integer primary key,
|
||||
ville text
|
||||
);
|
||||
|
||||
-- 2. Copiez les données de l'ancienne table vers la nouvelle
|
||||
INSERT INTO new_table (id, column1, column2)
|
||||
SELECT id, column1, column2 FROM old_table;
|
||||
create table societe (
|
||||
id integer primary key,
|
||||
nom text
|
||||
);
|
||||
|
||||
-- 3. Supprimez l'ancienne table
|
||||
DROP TABLE old_table;
|
||||
create table chauffeur (
|
||||
id integer primary key,
|
||||
nom text
|
||||
);
|
||||
|
||||
-- 4. Renommez la nouvelle table avec le nom de l'ancienne table
|
||||
ALTER TABLE new_table RENAME TO old_table;
|
||||
create table camion (
|
||||
immatriculation text primary key,
|
||||
marque text,
|
||||
permis text,
|
||||
foreign key (permis) references permis(categorie)
|
||||
);
|
||||
|
||||
create table permis (
|
||||
categorie text primary key,
|
||||
poids numeric
|
||||
);
|
||||
|
||||
|
||||
create table transport (
|
||||
id integer primary key,
|
||||
jour text,
|
||||
depart integer,
|
||||
arrivee integer,
|
||||
chauffeur integer,
|
||||
camion text,
|
||||
foreign key (depart) references entrepot(id),
|
||||
foreign key (arrivee) references entrepot(id),
|
||||
foreign key (chauffeur) references chauffeur(id),
|
||||
foreign key (camion) references camion(immatriculation),
|
||||
check (arrivee <> depart)
|
||||
);
|
||||
```
|
||||
|
||||
## Insertion des données
|
||||
|
||||
Je ne spécifie pas les colonnes. Je dois mettre toutes les valeurs dans l'ordre des colonnes
|
||||
|
||||
```sql
|
||||
insert into societe values (1, 'UPS');
|
||||
```
|
||||
|
||||
Je spécifie uniquement la colonne nom. la colonne id qui est integer primary key est automatiquement incrémentée : 1, 2, 3, ...
|
||||
|
||||
```sql
|
||||
insert into chauffeur (nom) values ('Albert');
|
||||
```
|
||||
|
||||
Insérer 2 lignes en une seule requête
|
||||
|
||||
```sql
|
||||
insert into chauffeur (nom) values
|
||||
('Samia'),
|
||||
('Samy');
|
||||
```
|
||||
|
||||
Supprimer un enregistrement
|
||||
|
||||
```sql
|
||||
delete from chauffeur where id = 5;
|
||||
```
|
||||
|
||||
```sql
|
||||
insert into permis (categorie, poids) values
|
||||
('B', 3.5),
|
||||
('C', 32),
|
||||
('CE', 44);
|
||||
|
||||
insert into entrepot values
|
||||
(1, 'Saint Dié'),
|
||||
(2, 'Paris'),
|
||||
(3, 'Lyon'),
|
||||
(4, 'Marseille');
|
||||
|
||||
insert into camion (immatriculation, marque) values
|
||||
('AA123BB', 'Volvo'),
|
||||
('ZZ342VD', 'Renault'),
|
||||
('SP457MP', 'Mercedes'),
|
||||
('XQ876YE', 'Volvo');
|
||||
|
||||
-- modification de table
|
||||
-- ajouter une colonne pour le permis
|
||||
alter table camion
|
||||
add column permis text;
|
||||
|
||||
update camion set permis = 'B'
|
||||
where immatriculation = 'ZZ342VD';
|
||||
|
||||
update camion set permis = 'C'
|
||||
where immatriculation = 'SP457MP';
|
||||
|
||||
update camion set permis = 'CE'
|
||||
where immatriculation = 'AA123BB';
|
||||
|
||||
update camion set permis = 'CE'
|
||||
where immatriculation = 'XQ876YE';
|
||||
|
||||
-- 1 = Saint Dié
|
||||
-- 3 = Lyon
|
||||
-- 2 = Samia
|
||||
insert into transport (id, jour, depart, arrivee,
|
||||
chauffeur, camion)
|
||||
values (1, '2025-09-19', 1, 3, 2, 'SP457MP')
|
||||
|
||||
insert into transport (id, jour, depart, arrivee,
|
||||
chauffeur, camion)
|
||||
values (50, '2030-09-19', 100, 30, 20, 'XXXXXXX')
|
||||
|
||||
drop table camion ;
|
||||
```
|
||||
|
||||
### Activer le contrôle des liens
|
||||
|
||||
```sql
|
||||
pragma foreign_keys = ON;
|
||||
|
||||
insert into camion (immatriculation, marque, permis)
|
||||
values ('DF244JG', 'Mercedes', 'Z');
|
||||
```
|
||||
|
||||
### Supprimer une table
|
||||
|
||||
```sql
|
||||
drop table transport ;
|
||||
```
|
||||
|
||||
6
td2.sql
6
td2.sql
@@ -1,9 +1,3 @@
|
||||
select count(*) from customers;
|
||||
|
||||
select count(*) from albums;
|
||||
|
||||
select count(*) from artists;
|
||||
|
||||
select distinct country from customers;
|
||||
|
||||
select country, count(*) from customers group by Country order by count(*) desc;
|
||||
|
||||
24
tp2.md
24
tp2.md
@@ -59,7 +59,8 @@ select firstName || ' ' || lastName as nomComplet
|
||||
|
||||
|
||||
> [!WARNING]
|
||||
> Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs *brazil* est différent de *Brazil*.
|
||||
> Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs.<br>
|
||||
*brazil* est différent de *Brazil*.
|
||||
|
||||
- Filtrer les clients dont l'age est inférerieur à 25 ans et qui vivent aux USA
|
||||
|
||||
@@ -76,7 +77,8 @@ Ici aussi il faut respecter les majuscules pour la valeur *USA*.
|
||||
- Filter les albums qui sont sortis entre 1984 et 1989
|
||||
|
||||
```sql
|
||||
select Title, Year from albums
|
||||
select Title, Year
|
||||
from albums
|
||||
where Year between 1984 and 1989
|
||||
```
|
||||
|
||||
@@ -110,15 +112,15 @@ select firstName || ' ' || lastName as nomComplet, Country
|
||||
|
||||
```sql
|
||||
select InvoiceId, InvoiceDate , Total
|
||||
from invoices
|
||||
where InvoiceDate >= '2010-01-01'
|
||||
from invoices
|
||||
where InvoiceDate >= '2010-01-01'
|
||||
and InvoiceDate <= '2010-12-31'
|
||||
```
|
||||
|
||||
```sql
|
||||
select InvoiceId, InvoiceDate , Total
|
||||
from invoices
|
||||
where InvoiceDate between '2010-01-01' and '2010-12-31'
|
||||
from invoices
|
||||
where InvoiceDate between '2010-01-01' and '2010-12-31'
|
||||
```
|
||||
|
||||
L'opérateur `between` combine supérieur ou égal >= ET inférieur ou égal <= dans une seule commande
|
||||
@@ -126,8 +128,8 @@ L'opérateur `between` combine supérieur ou égal >= ET inférieur ou égal <=
|
||||
|
||||
```sql
|
||||
select InvoiceId, InvoiceDate , Total
|
||||
from invoices
|
||||
where STRFTIME('%Y', InvoiceDate) = '2010'
|
||||
from invoices
|
||||
where STRFTIME('%Y', InvoiceDate) = '2010'
|
||||
```
|
||||
|
||||
strftime *string from time* il faut les ''
|
||||
@@ -135,8 +137,8 @@ strftime *string from time* il faut les ''
|
||||
```sql
|
||||
--
|
||||
select InvoiceId, InvoiceDate , Total
|
||||
from invoices
|
||||
where cast(STRFTIME('%Y', InvoiceDate) as INT) = 2010
|
||||
from invoices
|
||||
where cast(STRFTIME('%Y', InvoiceDate) as INT) = 2010
|
||||
```
|
||||
|
||||
`cast` transforme la chaine en entier (nombre)
|
||||
@@ -176,7 +178,7 @@ Pour afficher un top il suffit de trier par ordre décroissant `DESC` et de limi
|
||||
```sql
|
||||
SELECT Name, Milliseconds FROM tracks
|
||||
order by Milliseconds DESC
|
||||
LIMIT 10;
|
||||
limit 10;
|
||||
```
|
||||
|
||||
- Afficher les 5 factures les plus importantes par montant total.
|
||||
|
||||
Reference in New Issue
Block a user