2.2 - Exercices


Consigner également les commandes de chaque exercice dans un fichier de script.

Les colonnes entre ` représentent un alias et celles entre * un calcul.

Cuisto

Créer la base de données cuisto contenant la table recipes et lui attribuer tous les privilèges à l'utilisateur chef

Utiliser l'utilisateur chef pour réaliser l'exercice

Rédiger une requête d'insertion complète (identifier toutes les colonnes et leur valeur)

Rédiger une requête d'insertion minimale

Exécuter les insertions suivantes pour populer la table

INSERT INTO recipes 
VALUES ('Sandwich', 'Une garniture entre 2 tranches de pain', 'Pain, Garniture', 'Trancher, Garnir, Déguster', 5, 'Principal'),
('Sandwich', 'Du fromage entre 2 tranches de pain', 'Pain, Fromage', 'Trancher, Garnir, Griller, Déguster', 7, 'Principal'),
('Paté chinois', NULL, 'Steak, Blé d''inde, Patates', 'Cuire la viande, mélanger', 30, 'Principal'),
('Lasagne', 'Pâtes étagées', 'Pâtes, sauce', 'Cuire, Étendre, Garnir', 35, 'Principal'),
('Poutine', NULL, 'Patates, Sauce brune, Fromage en grain', 'Couper les patates en frites, cuire au four, réchauffer la sauce, servir', 30, 'Principal'),
('Soupe', 'Bouillon de légumes', 'Légumes de saison', 'Mélanger dans un chaudron, bouillir', 20, 'Entrée'),
('Soupe', 'Crème de brocoli', 'Bouillon, Patates, Brocoli', 'Cuire, Passer au mélangeur', 25, 'Entrée'),
('Soupe', 'Poulet et nouilles', 'Poulet, nouilles', 'Cuire le poulet et les pâtes séparément, mélanger', 45, 'Entrée');

INSERT INTO recipes (name, description, category)
VALUES ('Pomme', 'Fruit frais', 'Collation'), ('Cheddar', 'Batonnets de fromage', 'Collation'), ('Craquelins', 'Petits biscuits', 'Collation');

Rédiger les requêtes de récupération pour afficher les informations suivantes

  • Toutes les colonnes de toutes les recettes
+---------------+----------------------------------------+----------------------------------------+---------------------------------------------------------------------------+------------------+-----------+                                                                                                                
| name          | description                            | ingredients                            | steps                                                                     | preparation_time | category  |
+---------------+----------------------------------------+----------------------------------------+---------------------------------------------------------------------------+------------------+-----------+
| Sandwich      | Une garniture entre 2 tranches de pain | Pain, Garniture                        | Trancher, Garnir, Déguster                                                |                5 | Principal |
| Sandwich      | Du fromage entre 2 tranches de pain    | Pain, Fromage                          | Trancher, Garnir, Griller, Déguster                                       |                7 | Principal |
...
| Soupe         | Bouillon de légumes                    | Légumes de saison                      | Mélanger dans un chaudron, bouillir                                       |               20 | Entrée    |
| Soupe         | Poulet et nouilles                     | Poulet, nouilles                       | Cuire le poulet et les pâtes séparément, mélanger                         |               45 | Entrée    |
| Cheddar       | Batonnets de fromage                   | NULL                                   | NULL                                                                      |                0 | Collation |
+---------------+----------------------------------------+----------------------------------------+---------------------------------------------------------------------------+------------------+-----------+
  • Le nom et le temps de préparation de toutes les recettes
    • Renommer les colonnes en français pour l'affichage
+---------------+-----------------------+
| `Nom`         | `Temps de préparation`|
+---------------+-----------------------+
| Sandwich      |                     5 |
| Paté chinois  |                    30 |
...
| Pomme         |                     0 |
| Craquelins    |                     0 |
+---------------+-----------------------+
  • Le nom et la description des recettes qui ont un temps de préparation inférieur à 30
    • Explorer la fonction CONCAT pour joindre le nom et la description
+-----------------------------------------------------+
| *Recette*                                           |
+-----------------------------------------------------+
| Sandwich : Une garniture entre 2 tranches de pain   |
| Sandwich : Du fromage entre 2 tranches de pain      |
...
| Cheddar : Batonnets de fromage                      |
| Craquelins : Petits biscuits                        |
+-----------------------------------------------------+

TO DO

Créer la base de données todo contenant la table tasks et lui attribuer tous les privilèges à l'utilisateur manager

Utiliser l'utilisateur manager pour réaliser l'exercice

Rédiger une requête d'insertion complète (identifier toutes les colonnes et leur valeur)

Rédiger une requête d'insertion minimale

Exécuter les insertions suivantes pour populer la table

  • Créer un script qui réinitialise la base de données dans cet état de départ et qui peut être exécuté à répétition en donnant le même résultat
INSERT INTO tasks 
VALUES (DEFAULT, 'a', 'tache a', 10, '2021-01-01', 'alice', 8, TRUE),
(DEFAULT, 'b', 'tache b', 3, '2021-01-01', 'bob', 5, TRUE),
(DEFAULT, 'c', 'tache c', 30, '2021-01-01', 'charlie', 10, TRUE),
(DEFAULT, 'd', NULL, 10, '2021-02-01', 'alice', 5, FALSE),
(DEFAULT, 'e', NULL, 12, '2021-02-01', 'alice', 14, FALSE),
(DEFAULT, 'f', 'tache f', 24, '2021-02-01', 'charlie', NULL, TRUE),
(DEFAULT, 'g', 'tache g', 34, '2021-03-01', 'bob', 30, FALSE),
(DEFAULT, 'h', NULL, 1, '2021-03-01', 'bob', 1, TRUE),
(DEFAULT, 'i', 'tache i', 18, '2021-04-01', 'bob', NULL, FALSE),
(DEFAULT, 'j', 'tache j', 4, '2021-05-01', 'charlie', NULL, TRUE),
(DEFAULT, 'k', 'tache k', 16, '2021-06-01', 'charlie', 12, TRUE),
(DEFAULT, 'l', 'tache l', 22, '2021-06-01', 'charlie', 21, FALSE),
(DEFAULT, 'm', NULL, 8, '2021-07-01', 'charlie', NULL, TRUE),
(DEFAULT, 'n', NULL, 6, '2021-08-01', 'alice', NULL, FALSE),
(DEFAULT, 'o', NULL, 2, '2021-08-01', 'charlie', 4, FALSE),
(DEFAULT, 'p', 'tache p', 10, '2021-08-01', 'bob', 8, FALSE),
(DEFAULT, 'q', NULL, 1, '2021-09-01', 'alice', 10, TRUE),
(DEFAULT, 'r', 'tache r', 3, '2021-09-01', 'alice', 7, TRUE),
(DEFAULT, 's', 'tache s', 5, '2021-10-01', 'bob', 4, FALSE),
(DEFAULT, 't', NULL, 7, '2021-10-01', 'charlie', 6, TRUE),
(DEFAULT, 'u', NULL, 2, '2021-10-01', 'charlie', 5, FALSE),
(DEFAULT, 'v', 'tache v', 4, '2021-11-01', 'bob', 5, FALSE),
(DEFAULT, 'w', 'tache w', 6, '2021-11-01', 'alice', 10, FALSE),
(DEFAULT, 'x', 'tache x', 12, '2021-12-01', 'alice', 10, TRUE),
(DEFAULT, 'y', 'tache y', 24, '2021-12-01', 'charlie', 20, FALSE),
(DEFAULT, 'z', 'tache z', 36, '2021-12-01', 'bob', 30, TRUE);

Rédiger les requêtes de récupération pour afficher les informations suivantes, sélectionner et renommer les colonnes selon les indications sous chaque requête

  • Toutes les tâches de alice
    • Nom, Description, Échéancier, Estimé, Effectif, Complétée
+------+-------------+------------+--------------------+-----------------+-----------+                                 
| name | description | due_date   | estimated_duration | actual_duration | completed |
+------+-------------+------------+--------------------+-----------------+-----------+
| a    | tache a     | 2021-01-01 |                 10 |               8 |         1 |
| d    | NULL        | 2021-02-01 |                 10 |               5 |         0 |
...
| w    | tache w     | 2021-11-01 |                  6 |              10 |         0 |
| x    | tache x     | 2021-12-01 |                 12 |              10 |         1 |
+------+-------------+------------+--------------------+-----------------+-----------+
  • Les tâches annulées(complétée sans aucun temps actuel)
    • Nom, Description
+------+-------------+                                                                                                 
| name | description |
+------+-------------+
| f    | tache f     |
...
+------+-------------+
  • Les tâches qui sont en retards(plus de temps que prévu)
    • Nom, Description, Échéancier, Estimé, Effectif, Complétée
+------+-------------+------------+--------------------+-----------------+-----------+                                 
| name | description | due_date   | estimated_duration | actual_duration | completed |
+------+-------------+------------+--------------------+-----------------+-----------+
| b    | tache b     | 2021-01-01 |                  3 |               5 |         1 |
| e    | NULL        | 2021-02-01 |                 12 |              14 |         0 |
...
| v    | tache v     | 2021-11-01 |                  4 |               5 |         0 |
| w    | tache w     | 2021-11-01 |                  6 |              10 |         0 |
+------+-------------+------------+--------------------+-----------------+-----------+
  • Les tâches complétées en avance(moins de temps que prévu)
    • Nom, Description, Échéancier, Estimé, Effectif, Complétée
    • Ajouter la colonne Gain qui calcule le nombre d'heures économisées
+-------+---------------+--------------+-----------+------------+---------------+--------+                                           
| `Nom` | `Description` | `Echeancier` | `Estimé`  | `Effectif` | `Complétée`   | *Gain* |
+-------+---------------+--------------+-----------+------------+---------------+--------+                                           
|   a   |   tache a     |   2021-01-01 |        10 |          8 |             1 |      2 |
|   d   |   NULL        |   2021-02-01 |        10 |          5 |             0 |      5 |
...
|   t   |   NULL        |   2021-10-01 |         7 |          6 |             1 |      1 |
|   y   |   tache y     |   2021-12-01 |        24 |         20 |             0 |      4 |
+-----+-------------+------------+---------+----------+-------------+------+
  • Les tâches qui ont causées une perte de productivité(complétée en plus de 120% du temps estimé)
    • Nom, Description, Estimé, Effectif
    • Ajouter la colonne Perte qui calcule le nombre d'heures du dépassement
    • Ajouter la colonne Retard qui calcule le pourcentage du dépassement de temps par rapport à l'estimation initiale
    • Explorer la fonction TRUNCATE pour restreindre le pourcentage à une seule décimale et ajouter le symbole % via CONCAT
+-------+---------------+-----------+------------+---------+----------+
| `Nom` | `Description` | `Estimé`  | `Effectif` | *Perte* | *Retard* |
+-------+---------------+-----------+------------+---------+----------+
|   b   |   tache b     |         3 |          5 |       2 |    66%   |
|   o   |   NULL        |         2 |          4 |       2 |   100%   |
...
|   v   |   tache v     |         4 |          5 |       1 |    25%   |
|   w   |   tache w     |         6 |         10 |       4 |    66%   |
+-------+---------------+-----------+------------+---------+----------+

Rétro-ingénierie

Exécuter la commande suivante dans votre terminal root pour injecter une base de données dans votre serveur.

echo 'CkNSRUFURSBPUiBSRVBMQUNFIERBVEFCQVNFIHN0b3JtczsgCgpDUkVBVEUgT1IgUkVQTEFDRSBU
QUJMRSBzdG9ybXMuZXZlbnRzICgKICBpZCBJTlQgVU5TSUdORUQgQVVUT19JTkNSRU1FTlQgS0VZ
LAogIGNpdHkgVkFSQ0hBUigyMDApIE5PVCBOVUxMLAogIHN0YXRlIFZBUkNIQVIoMjAwKSBOT1Qg
TlVMTCwKICBjb3VudHJ5IFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICBzdGFydCBEQVRFVElNRSBO
T1QgTlVMTCwKICBlbmQgREFURVRJTUUgREVGQVVMVCBOVUxMLAogIHR5cGUgVkFSQ0hBUigyMDAp
IE5PVCBOVUxMIENPTU1FTlQgJ2V4OiB3aWxkZmlyZSwgdGh1bmRlcnN0b3JtLCB3aW5kLCBmbG9v
ZCwgdHJvcGljYWwgc3Rvcm0sIHRvcm5hZG8sIGhlYXZ5IHJhaW4sIGVhcnRocXVha2UgZXRjLics
CiAgc3RyZW5ndGggRkxPQVQoNSwgMikgREVGQVVMVCBOVUxMIENPTU1FTlQgJyh3aW5kIHNwZWVk
LCBSaWNodGVyIHNjYWxlLCBGdWppdGEgU2NhbGUsIGV0Yy4pLCB3aGVyZSBhcHBsaWNhYmxlLics
CiAgZGFtYWdlX2VzdGltYXRlIElOVCBVTlNJR05FRCBERUZBVUxUIDAKKTsgCgo=' | base64 --decode | mysql;

# Informations sur les colonnes
# type:  wildfire, thunderstorm, wind, flood, etc.
# strength: wind speed, Richter scale, Fujita Scale, etc.

Inspecter le serveur pour repèrer la base de données créée

  • Créer l'utilisateur retro et lui attribuer tous les privilèges sur cette base de données
  • Utiliser l'utilisateur retro pour réaliser l'exercice

Résumer la structure de la table de la base de données sous la même forme que les modèles de données des exercices précédents

NOM TABLE
-------------
col_a TYPE ATTR ATTR = DEFAULT
col_b TYPE ATTR ATTR = DEFAULT
...

Rédiger une requête d'insertion complète (identifier toutes les colonnes et leur valeur)

Rédiger une requête d'insertion minimale

Expérimentation

  • Analyser les données des exercices précédents et ressortir d'autres requêtes/statistiques.
  • Créer des tables sur le contexte de votre choix et effectuer des requêtes d'insertion/récupération.