td

2025-09-12 07:16:48 +02:00
parent 903797d4bc
commit 2346f0cd39
5 changed files with 71 additions and 69 deletions

17
bdd.md

@@ -81,12 +81,17 @@ RDBMS
- Les [formes normales](formes_normales) - Les [formes normales](formes_normales)
- Le [schéma entité-relation](schema) - Le [schéma entité-relation](schema)
- Le [langage SQL](sql) - Le [langage SQL](sql)
- Les [jointures](jointure) - [DATA DEFINITION LANGAGE](ddl) (DDL)
- Les [déclencheurs](trigger) - [DATA QUERY LANGAGE](dql) (DQL)
- Les [vues](vues) - [DATA MANIPULATION LANGAGE](dml) (DML)
- Le principe [ACID](acid) - [DATA CONTROL LANGAGE](dcl) (DCL)
- Les [transactions](tcl) - [TRANSACTION CONTROL LANGAGE](tcl) (TCL)
- Le [format JSON](json) - Les [jointures](jointure)
- Les [déclencheurs](trigger)
- Les [vues](vues)
- Le principe [ACID](acid)
- Les [transactions](tcl)
- Le [format JSON](json)
### Travaux dirigés ### Travaux dirigés

@@ -1,4 +1,4 @@
# Système de gestion de bases de données relationnelles # Système de gestion de bases de données relationnelles
Les bases de données relationnelles sont un élément clé de la gestion de données dans de nombreuses applications informatiques. Elles fournissent une structure organisée pour stocker, gérer et récupérer des informations. Les bases de données relationnelles sont un élément clé de la gestion de données dans de nombreuses applications informatiques. Elles fournissent une structure organisée pour stocker, gérer et récupérer des informations.

6
sql.md

@@ -7,9 +7,3 @@ SQL est largement utilisé dans le domaine des bases de données et joue un rôl
Tous les SGBDR implément le langage SQL mais chacun l'a agrémenté d'extensions et de modifications non standard pour se démarquer des concurents. Tous les SGBDR implément le langage SQL mais chacun l'a agrémenté d'extensions et de modifications non standard pour se démarquer des concurents.
Le langage SQL est décomposé en 4 sous ensembles de commandes Le langage SQL est décomposé en 4 sous ensembles de commandes
- [DATA DEFINITION LANGAGE](ddl) (DDL)
- [DATA QUERY LANGAGE](dql) (DQL)
- [DATA MANIPULATION LANGAGE](dml) (DML)
- [DATA CONTROL LANGAGE](dcl) (DCL)
- [TRANSACTION CONTROL LANGAGE](tcl) (TCL)

25
td1.md

@@ -1,27 +1,32 @@
--- # Travaux dirigés
title: Travaux dirigés
---
## Schéma entités-relations ## Schéma entités-relations
Le schéma entité-relation est l'étape préparatoire à la réalisation d'une base de données. il modélise sous forme graphique un problème réel. Le schéma entité-relation est l'étape préparatoire à la réalisation d'une base de données. il modélise sous forme graphique un problème réel.
### Exercice 1. Association
### Exercice 1. Société de transport Une association est constituée d'adhérent. Un "marché" biologique est mis en place à destination de ces adhérents. Différents produits sont vendus. Les produits sont organisés en famille. Les adhérent viennent acheter des produits. Un ticket de caisse est édité.
Une société de transport possède une flotte de camion et plusieurs entrepots. Amélioration 1 : Les différents produits sont achetés chez des fournisseurs.
Amélioration 2 : Un même produit peut être approvisionné chez plusieurs fournisseurs.
### Exercice 2. Société de transport
Une société de transport possède une flotte de camion et plusieurs entrepots.
Cette société embauche des chauffeurs. Les camions sont basés à des entrepôts. Les camions sont affectés aux chauffeurs au jour le jour. Cette société embauche des chauffeurs. Les camions sont basés à des entrepôts. Les camions sont affectés aux chauffeurs au jour le jour.
La nature du permis limite les camions que le chauffeur peut conduire. La nature du permis limite les camions que le chauffeur peut conduire.
### Exercice 2. système de maintenance ### 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. 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 3. ERP (Enterprise resource planning) ### Exercice 4. ERP (Enterprise resource planning)
Uns société achète des articles pour fabriquer des produits finis. 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. Un entrepôt permet de stocker à la fois les articles et les produits finis.
@@ -33,10 +38,10 @@ Nom Nom Nom Article Produit Fini A
Prix d'achat Prix vente Nom Produit Fini Quantite Produit f Prix d'achat Prix vente Nom Produit Fini Quantite Produit f
Quantité Date Quantité Date
****** ******
Produit Gamme de fabrication Production Stockage Produit Gamme de fabrication Production Stockage
Nom Produit Produit Produit Nom Produit Produit Produit
Prix Produit Quantité Quantité Prix Produit Quantité Quantité
fini (o/n) Quantité Date fini (o/n) Quantité Date
Activer les contraintes dans SQLite Activer les contraintes dans SQLite

90
td2.md

@@ -1,8 +1,6 @@
--- # Travaux dirigés
title: Travaux dirigés
---
### 1. Nombre de clients ## 1. Nombre de clients
```sql ```sql
select count(*) from customers; select count(*) from customers;
@@ -36,44 +34,44 @@ select country, count(*) from customers group by Country order by count(*) desc;
### 6. Nombre de pistes par genre ### 6. Nombre de pistes par genre
```sql ```sql
select g.Name, count(*) as nb from tracks t select g.Name, count(*) as nb from tracks t
inner join genres g on g.GenreId = t.GenreId inner join genres g on g.GenreId = t.GenreId
group by g.GenreId order by nb desc; group by g.GenreId order by nb desc;
``` ```
### 7. Nombre d'albums par artiste ### 7. Nombre d'albums par artiste
```sql ```sql
select a.Name, count(*) as nb from artists a select a.Name, count(*) as nb from artists a
inner join albums b on b.ArtistId = a.ArtistId inner join albums b on b.ArtistId = a.ArtistId
group by a.Name order by nb desc; group by a.Name order by nb desc;
``` ```
### 8. Nombre de piste par artiste ### 8. Nombre de piste par artiste
```sql ```sql
select a.Name, count(*) as nb from artists a select a.Name, count(*) as nb from artists a
inner join albums b on a2.ArtistId = a.ArtistId inner join albums b on a2.ArtistId = a.ArtistId
inner join tracks t on t.AlbumId = b.AlbumId inner join tracks t on t.AlbumId = b.AlbumId
group by a.Name group by a.Name
order by nb desc; order by nb desc;
``` ```
### 9. Nombre de minute de musique par album ### 9. Nombre de minute de musique par album
```sql ```sql
select a.Title , sum(t.Milliseconds/60000) as duree select a.Title , sum(t.Milliseconds/60000) as duree
from tracks t from tracks t
inner join albums a on a.AlbumId = t.AlbumId inner join albums a on a.AlbumId = t.AlbumId
group by a.Title group by a.Title
order by duree desc; order by duree desc;
``` ```
### 10. Recette par piste ### 10. Recette par piste
```sql ```sql
select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t from tracks t
inner join invoice_items ii on ii.TrackId = t.TrackId inner join invoice_items ii on ii.TrackId = t.TrackId
group by t.Name order by recette desc; group by t.Name order by recette desc;
``` ```
@@ -82,10 +80,10 @@ group by t.Name order by recette desc;
```sql ```sql
select a.Title, sum(ii.UnitPrice*ii.Quantity) as recette select a.Title, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t from tracks t
inner join invoice_items ii on (ii.TrackId = t.TrackId) inner join invoice_items ii on (ii.TrackId = t.TrackId)
inner join albums a on a.AlbumId = t.AlbumId inner join albums a on a.AlbumId = t.AlbumId
group by a.Title group by a.Title
order by recette desc; order by recette desc;
``` ```
@@ -94,20 +92,20 @@ order by recette desc;
```sql ```sql
select c.FirstName, c.LastName, sum(i.Total) as total select c.FirstName, c.LastName, sum(i.Total) as total
from customers c from customers c
inner join invoices i on i.CustomerId = c.CustomerId inner join invoices i on i.CustomerId = c.CustomerId
GROUP by c.CustomerId GROUP by c.CustomerId
order by total DESC order by total DESC
limit 3; limit 3;
``` ```
### 11. Les genres écoutés par Isabelle Mercier ### 11. Les genres écoutés par Isabelle Mercier
```sql ```sql
select distinct g.Name from genres g select distinct g.Name from genres g
inner join tracks t on t.GenreId = g.GenreId inner join tracks t on t.GenreId = g.GenreId
inner join invoice_items ii on ii.TrackId = t.TrackId inner join invoice_items ii on ii.TrackId = t.TrackId
inner join invoices i on ii.InvoiceId = i.InvoiceId inner join invoices i on ii.InvoiceId = i.InvoiceId
inner join customers c on c.CustomerId = i.CustomerId inner join customers c on c.CustomerId = i.CustomerId
where c.FirstName = 'Isabelle' and c.LastName ='Mercier'; where c.FirstName = 'Isabelle' and c.LastName ='Mercier';
``` ```
Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules) Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules)
@@ -123,27 +121,27 @@ select sum(i.Total) from invoices i where i.InvoiceDate > DATETIME('2013-05-01')
### 13. Recette entre le 15/04/2012 et le 20/06/2012 ### 13. Recette entre le 15/04/2012 et le 20/06/2012
```sql ```sql
select sum(i.Total) select sum(i.Total)
from invoices i from invoices i
where i.InvoiceDate between DATETIME('2012-04-15') and DATETIME('2012-06-20'); where i.InvoiceDate between DATETIME('2012-04-15') and DATETIME('2012-06-20');
``` ```
### 14. Recette du mois de février 2012 ### 14. Recette du mois de février 2012
```sql ```sql
select sum(i.Total) select sum(i.Total)
from invoices i from invoices i
where STRFTIME('%m/%Y', i.InvoiceDate) = '02/2012' where STRFTIME('%m/%Y', i.InvoiceDate) = '02/2012'
``` ```
STRFTIME (string from datetime) permet de formater au format de texte un date. Le format est complètement libre et personnalisable. STRFTIME (string from datetime) permet de formater au format de texte un date. Le format est complètement libre et personnalisable.
### 15. Recettes par mois ### 15. Recettes par mois
```sql ```sql
select STRFTIME('%Y-%m', i.InvoiceDate) as mois, select STRFTIME('%Y-%m', i.InvoiceDate) as mois,
sum(i.Total) sum(i.Total)
from invoices i from invoices i
group by mois group by mois
order by mois order by mois
``` ```
@@ -151,8 +149,8 @@ order by mois
### 16. Recette de l'année 2013 ### 16. Recette de l'année 2013
```sql ```sql
select sum(i.Total) select sum(i.Total)
from invoices i from invoices i
where STRFTIME('%Y', i.InvoiceDate) = '2013' where STRFTIME('%Y', i.InvoiceDate) = '2013'
``` ```
## Recherche sur le texte ## Recherche sur le texte
@@ -160,7 +158,7 @@ where STRFTIME('%Y', i.InvoiceDate) = '2013'
### 17. Liste des pistes qui contiennent le mot Love ### 17. Liste des pistes qui contiennent le mot Love
```sql ```sql
select t.Name from tracks t select t.Name from tracks t
where t.NAME LIKE '%love%'; where t.NAME LIKE '%love%';
``` ```
L'opérateur LIKE ne tient pas compte de la différence minuscule/majuscule L'opérateur LIKE ne tient pas compte de la différence minuscule/majuscule
@@ -168,16 +166,16 @@ L'opérateur LIKE ne tient pas compte de la différence minuscule/majuscule
### 18. Liste des pistes qui contiennent les lettres Sun ### 18. Liste des pistes qui contiennent les lettres Sun
```sql ```sql
select t.Name from tracks t select t.Name from tracks t
where t.NAME LIKE '%SUN%'; where t.NAME LIKE '%SUN%';
``` ```
### 19. Liste des pistes qui contiennent le mot Sun ### 19. Liste des pistes qui contiennent le mot Sun
```sql ```sql
select t.Name from tracks t select t.Name from tracks t
where t.NAME LIKE 'SUN %' OR where t.NAME LIKE 'SUN %' OR
t.NAME LIKE '% SUN' OR t.NAME LIKE '% SUN' OR
t.NAME LIKE '% SUN %'; t.NAME LIKE '% SUN %';
``` ```
@@ -189,8 +187,8 @@ where t.NAME LIKE 'SUN %' OR
select i.Total, sum(ii.UnitPrice*ii.Quantity) as somme, select i.Total, sum(ii.UnitPrice*ii.Quantity) as somme,
printf('%.20f', i.Total - sum(ii.UnitPrice*ii.Quantity)) printf('%.20f', i.Total - sum(ii.UnitPrice*ii.Quantity))
from invoices i from invoices i
inner join invoice_items ii on ii.InvoiceId = i.InvoiceId inner join invoice_items ii on ii.InvoiceId = i.InvoiceId
group by i.InvoiceId group by i.InvoiceId
HAVING Abs(i.Total - somme) >= 0.01 HAVING Abs(i.Total - somme) >= 0.01
``` ```
@@ -200,6 +198,6 @@ ou en utilisant ROUND : HAVING i.Total <> Round(somme,2)
```sql ```sql
select t.Name from tracks t select t.Name from tracks t
left join invoice_items ii on ii.TrackId = t.TrackId left join invoice_items ii on ii.TrackId = t.TrackId
where t.UnitPrice <> ii.UnitPrice where t.UnitPrice <> ii.UnitPrice
``` ```