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 :
|
Les thèmes recommandés à développer pour atteindre les acquis d'apprentissage visés sont :
|
||||||
|
|
||||||
- Bases de données :
|
- Bases de données :
|
||||||
- Introduction aux bases de données relationnelles ;
|
- [X] Introduction aux bases de données relationnelles ;
|
||||||
- Tables, schémas relationnels ;
|
- [X] Tables, schémas relationnels ;
|
||||||
- Requêtes SQL de base ;
|
- [X] Requêtes SQL de base ;
|
||||||
- Base de données noSQL.
|
- [ ] Base de données noSQL.
|
||||||
- Introduction à l'IoT :
|
- Introduction à l'IoT :
|
||||||
- Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
|
- [ ] Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
|
||||||
- Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
|
- [ ] Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
|
||||||
- Gestion de la qualité de service (QoS) ;
|
- [ ] Gestion de la qualité de service (QoS) ;
|
||||||
- Notions d'API (déclaration, appel de services) ;
|
- [ ] Notions d'API (déclaration, appel de services) ;
|
||||||
- Tableau de bord (node-red, grafana...).
|
- [ ] Tableau de bord (node-red, grafana...).
|
||||||
|
|
||||||
### Volume horaire
|
### 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.
|
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.
|
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.
|
```sql
|
||||||
|
create table entrepot (
|
||||||
Une machine est caractérisée par sa marque et sa date d'achat.
|
id integer primary key,
|
||||||
|
ville text
|
||||||
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
|
create table societe (
|
||||||
INSERT INTO new_table (id, column1, column2)
|
id integer primary key,
|
||||||
SELECT id, column1, column2 FROM old_table;
|
nom text
|
||||||
|
);
|
||||||
|
|
||||||
-- 3. Supprimez l'ancienne table
|
create table chauffeur (
|
||||||
DROP TABLE old_table;
|
id integer primary key,
|
||||||
|
nom text
|
||||||
|
);
|
||||||
|
|
||||||
-- 4. Renommez la nouvelle table avec le nom de l'ancienne table
|
create table camion (
|
||||||
ALTER TABLE new_table RENAME TO old_table;
|
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 distinct country from customers;
|
||||||
|
|
||||||
select country, count(*) from customers group by Country order by count(*) desc;
|
select country, count(*) from customers group by Country order by count(*) desc;
|
||||||
|
|||||||
26
tp2.md
26
tp2.md
@@ -59,7 +59,8 @@ select firstName || ' ' || lastName as nomComplet
|
|||||||
|
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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
|
- 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
|
- Filter les albums qui sont sortis entre 1984 et 1989
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
select Title, Year from albums
|
select Title, Year
|
||||||
|
from albums
|
||||||
where Year between 1984 and 1989
|
where Year between 1984 and 1989
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -110,15 +112,15 @@ select firstName || ' ' || lastName as nomComplet, Country
|
|||||||
|
|
||||||
```sql
|
```sql
|
||||||
select InvoiceId, InvoiceDate , Total
|
select InvoiceId, InvoiceDate , Total
|
||||||
from invoices
|
from invoices
|
||||||
where InvoiceDate >= '2010-01-01'
|
where InvoiceDate >= '2010-01-01'
|
||||||
and InvoiceDate <= '2010-12-31'
|
and InvoiceDate <= '2010-12-31'
|
||||||
```
|
```
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
select InvoiceId, InvoiceDate , Total
|
select InvoiceId, InvoiceDate , Total
|
||||||
from invoices
|
from invoices
|
||||||
where InvoiceDate between '2010-01-01' and '2010-12-31'
|
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
|
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
|
```sql
|
||||||
select InvoiceId, InvoiceDate , Total
|
select InvoiceId, InvoiceDate , Total
|
||||||
from invoices
|
from invoices
|
||||||
where STRFTIME('%Y', InvoiceDate) = '2010'
|
where STRFTIME('%Y', InvoiceDate) = '2010'
|
||||||
```
|
```
|
||||||
|
|
||||||
strftime *string from time* il faut les ''
|
strftime *string from time* il faut les ''
|
||||||
@@ -135,8 +137,8 @@ strftime *string from time* il faut les ''
|
|||||||
```sql
|
```sql
|
||||||
--
|
--
|
||||||
select InvoiceId, InvoiceDate , Total
|
select InvoiceId, InvoiceDate , Total
|
||||||
from invoices
|
from invoices
|
||||||
where cast(STRFTIME('%Y', InvoiceDate) as INT) = 2010
|
where cast(STRFTIME('%Y', InvoiceDate) as INT) = 2010
|
||||||
```
|
```
|
||||||
|
|
||||||
`cast` transforme la chaine en entier (nombre)
|
`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
|
```sql
|
||||||
SELECT Name, Milliseconds FROM tracks
|
SELECT Name, Milliseconds FROM tracks
|
||||||
order by Milliseconds DESC
|
order by Milliseconds DESC
|
||||||
LIMIT 10;
|
limit 10;
|
||||||
```
|
```
|
||||||
|
|
||||||
- Afficher les 5 factures les plus importantes par montant total.
|
- Afficher les 5 factures les plus importantes par montant total.
|
||||||
|
|||||||
Reference in New Issue
Block a user