From 2346f0cd39db34254e4d204b86c63219ecad0f9f Mon Sep 17 00:00:00 2001 From: medina5 Date: Fri, 12 Sep 2025 07:16:48 +0200 Subject: [PATCH] td --- bdd.md | 17 +++++++---- sgbdr.md | 2 +- sql.md | 6 ---- td1.md | 25 +++++++++------- td2.md | 90 +++++++++++++++++++++++++++----------------------------- 5 files changed, 71 insertions(+), 69 deletions(-) diff --git a/bdd.md b/bdd.md index 6d6e15c..7d6c331 100644 --- a/bdd.md +++ b/bdd.md @@ -81,12 +81,17 @@ RDBMS - Les [formes normales](formes_normales) - Le [schéma entité-relation](schema) - Le [langage SQL](sql) - - Les [jointures](jointure) - - Les [déclencheurs](trigger) - - Les [vues](vues) - - Le principe [ACID](acid) - - Les [transactions](tcl) - - Le [format JSON](json) + - [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) +- Les [jointures](jointure) +- Les [déclencheurs](trigger) +- Les [vues](vues) +- Le principe [ACID](acid) +- Les [transactions](tcl) +- Le [format JSON](json) ### Travaux dirigés diff --git a/sgbdr.md b/sgbdr.md index 0f38cb6..1aa213a 100644 --- a/sgbdr.md +++ b/sgbdr.md @@ -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. diff --git a/sql.md b/sql.md index 0b64902..b120ce8 100644 --- a/sql.md +++ b/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. 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) diff --git a/td1.md b/td1.md index e7039da..212f4b1 100644 --- a/td1.md +++ b/td1.md @@ -1,27 +1,32 @@ ---- -title: Travaux dirigés ---- +# Travaux dirigés ## 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. +### 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. 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. -### 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. @@ -33,10 +38,10 @@ Nom Nom Nom Article Produit Fini A 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é +Prix Produit Quantité Quantité fini (o/n) Quantité Date Activer les contraintes dans SQLite diff --git a/td2.md b/td2.md index fc4fb7f..747a7c1 100644 --- a/td2.md +++ b/td2.md @@ -1,8 +1,6 @@ ---- -title: Travaux dirigés ---- +# Travaux dirigés -### 1. Nombre de clients +## 1. Nombre de clients ```sql 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 ```sql -select g.Name, count(*) as nb from tracks t -inner join genres g on g.GenreId = t.GenreId +select g.Name, count(*) as nb from tracks t +inner join genres g on g.GenreId = t.GenreId group by g.GenreId order by nb desc; ``` ### 7. Nombre d'albums par artiste ```sql -select a.Name, count(*) as nb from artists a -inner join albums b on b.ArtistId = a.ArtistId +select a.Name, count(*) as nb from artists a +inner join albums b on b.ArtistId = a.ArtistId group by a.Name order by nb desc; ``` ### 8. Nombre de piste par artiste ```sql -select a.Name, count(*) as nb from artists a -inner join albums b on a2.ArtistId = a.ArtistId -inner join tracks t on t.AlbumId = b.AlbumId -group by a.Name +select a.Name, count(*) as nb from artists a +inner join albums b on a2.ArtistId = a.ArtistId +inner join tracks t on t.AlbumId = b.AlbumId +group by a.Name order by nb desc; ``` ### 9. Nombre de minute de musique par album ```sql -select a.Title , sum(t.Milliseconds/60000) as duree -from tracks t -inner join albums a on a.AlbumId = t.AlbumId -group by a.Title +select a.Title , sum(t.Milliseconds/60000) as duree +from tracks t +inner join albums a on a.AlbumId = t.AlbumId +group by a.Title order by duree desc; ``` ### 10. Recette par piste ```sql -select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette -from tracks t +select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette +from tracks t inner join invoice_items ii on ii.TrackId = t.TrackId group by t.Name order by recette desc; ``` @@ -82,10 +80,10 @@ group by t.Name order by recette desc; ```sql 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 albums a on a.AlbumId = t.AlbumId -group by a.Title +inner join albums a on a.AlbumId = t.AlbumId +group by a.Title order by recette desc; ``` @@ -94,20 +92,20 @@ order by recette desc; ```sql select c.FirstName, c.LastName, sum(i.Total) as total from customers c -inner join invoices i on i.CustomerId = c.CustomerId -GROUP by c.CustomerId -order by total DESC +inner join invoices i on i.CustomerId = c.CustomerId +GROUP by c.CustomerId +order by total DESC limit 3; ``` ### 11. Les genres écoutés par Isabelle Mercier ```sql -select distinct g.Name from genres g -inner join tracks t on t.GenreId = g.GenreId -inner join invoice_items ii on ii.TrackId = t.TrackId -inner join invoices i on ii.InvoiceId = i.InvoiceId -inner join customers c on c.CustomerId = i.CustomerId +select distinct g.Name from genres g +inner join tracks t on t.GenreId = g.GenreId +inner join invoice_items ii on ii.TrackId = t.TrackId +inner join invoices i on ii.InvoiceId = i.InvoiceId +inner join customers c on c.CustomerId = i.CustomerId where c.FirstName = 'Isabelle' and c.LastName ='Mercier'; ``` 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 ```sql -select sum(i.Total) -from invoices i +select sum(i.Total) +from invoices i where i.InvoiceDate between DATETIME('2012-04-15') and DATETIME('2012-06-20'); ``` ### 14. Recette du mois de février 2012 ```sql -select sum(i.Total) -from invoices i +select sum(i.Total) +from invoices i 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 ```sql select STRFTIME('%Y-%m', i.InvoiceDate) as mois, sum(i.Total) -from invoices i +from invoices i group by mois order by mois ``` @@ -151,8 +149,8 @@ order by mois ### 16. Recette de l'année 2013 ```sql -select sum(i.Total) -from invoices i +select sum(i.Total) +from invoices i where STRFTIME('%Y', i.InvoiceDate) = '2013' ``` ## Recherche sur le texte @@ -160,7 +158,7 @@ where STRFTIME('%Y', i.InvoiceDate) = '2013' ### 17. Liste des pistes qui contiennent le mot Love ```sql -select t.Name from tracks t +select t.Name from tracks t where t.NAME LIKE '%love%'; ``` 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 ```sql -select t.Name from tracks t +select t.Name from tracks t where t.NAME LIKE '%SUN%'; ``` ### 19. Liste des pistes qui contiennent le mot Sun ```sql -select t.Name from tracks t -where t.NAME LIKE 'SUN %' OR - t.NAME LIKE '% SUN' OR +select t.Name from tracks t +where t.NAME LIKE 'SUN %' OR + t.NAME LIKE '% SUN' OR t.NAME LIKE '% SUN %'; ``` @@ -189,8 +187,8 @@ where t.NAME LIKE 'SUN %' OR select i.Total, sum(ii.UnitPrice*ii.Quantity) as somme, printf('%.20f', i.Total - sum(ii.UnitPrice*ii.Quantity)) from invoices i -inner join invoice_items ii on ii.InvoiceId = i.InvoiceId -group by i.InvoiceId +inner join invoice_items ii on ii.InvoiceId = i.InvoiceId +group by i.InvoiceId HAVING Abs(i.Total - somme) >= 0.01 ``` @@ -200,6 +198,6 @@ ou en utilisant ROUND : HAVING i.Total <> Round(somme,2) ```sql select t.Name from tracks t -left join invoice_items ii on ii.TrackId = t.TrackId -where t.UnitPrice <> ii.UnitPrice +left join invoice_items ii on ii.TrackId = t.TrackId +where t.UnitPrice <> ii.UnitPrice ```