Sql - Boutique En Ligne

Absolument ! Voici un exercice complet de SQL (SQLite) pour une boutique en ligne.

1. Modèle Logique des Données (MLD) en ER Diagram

Extrait de code

erDiagram
    CLIENT ||--o{ COMMANDE : passe
    COMMANDE {
        INTEGER id_commande PK
        DATE date_commande
        INTEGER id_client FK
        FLOAT montant_total
        VARCHAR etat
    }
    PRODUIT ||--o{ LIGNE_COMMANDE : contient
    COMMANDE ||--o{ LIGNE_COMMANDE : inclut
    LIGNE_COMMANDE {
        INTEGER id_ligne_commande PK
        INTEGER id_commande FK
        INTEGER id_produit FK
        INTEGER quantite
        FLOAT prix_unitaire
    }
    CATEGORIE ||--o{ PRODUIT : appartient
    PRODUIT {
        INTEGER id_produit PK
        VARCHAR nom_produit
        TEXT description
        FLOAT prix
        INTEGER id_categorie FK
        INTEGER stock
    }
    FOURNISSEUR ||--o{ PRODUIT : fournit
    PRODUIT {
        INTEGER id_fournisseur FK
    }
    CLIENT {
        INTEGER id_client PK
        VARCHAR nom
        VARCHAR prenom
        VARCHAR email
        VARCHAR adresse
        VARCHAR telephone
    }
    CATEGORIE {
        INTEGER id_categorie PK
        VARCHAR nom_categorie
    }
    FOURNISSEUR {
        INTEGER id_fournisseur PK
        VARCHAR nom_fournisseur
        VARCHAR adresse_fournisseur
        VARCHAR telephone_fournisseur
        VARCHAR email_fournisseur
    }

2. Création de la Base de Données et des Tables (À faire par vous)

En utilisant un outil SQLite (comme DB Browser for SQLite, ou en ligne), créez une nouvelle base de données nommée boutique_en_ligne.db et exécutez les instructions SQL pour créer les tables basées sur le diagramme ER ci-dessus. Assurez-vous de définir les clés primaires et les clés étrangères correctement.

3. Insertion de Données (Instructions et Données)

Maintenant, insérez les données suivantes dans les tables que vous avez créées.

Table CLIENT:

id_clientnomprenomemailadressetelephone
1DupontJeanjean.dupont@email.com10 rue de la Paix, 75001 Paris01 23 45 67 89
2LefevreSophie[adresse e-mail supprimée]5 avenue des Lilas, 69003 Lyon06 98 76 54 32
3MartinPierre[adresse e-mail supprimée]12 boulevard Carnot, 31000 Toulouse05 61 01 02 03
4DuboisAlice[adresse e-mail supprimée]3 rue du Château, 44000 Nantes02 40 50 60 70

Table CATEGORIE:

id_categorienom_categorie
1Livres
2Électronique
3Vêtements
4Maison

Table PRODUIT:

id_produitnom_produitdescriptionprixid_categoriestockid_fournisseur
1Le Seigneur des AnneauxRoman de J.R.R. Tolkien25.501501
2Smartphone dernier modèleÉcran OLED, 128Go de stockage, 5G799.992252
3T-shirt en coton bioTaille M, couleur bleu marine19.9031003
4Lampe de chevet designLumière LED, 3 intensités45.004302
5Les MisérablesRoman de Victor Hugo18.751751
6Casque audio sans filBluetooth, réduction de bruit active149.002402
7Jean slim fitTaille 32, couleur noir59.953603

Table FOURNISSEUR:

id_fournisseurnom_fournisseuradresse_fournisseurtelephone_fournisseuremail_fournisseur
1Editions XYZ15 rue des Livres, 75005 Paris01 44 44 44 44[adresse e-mail supprimée]
2TechPlus SA20 avenue de la Tech, 69100 Villeurbanne04 78 88 88 88[adresse e-mail supprimée]
3Mode & Cie8 rue des Textiles, 59000 Lille03 20 30 40 50[adresse e-mail supprimée]

Table COMMANDE:

id_commandedate_commandeid_clientmontant_totaletat
12025-04-011102.00Livrée
22025-04-032819.89En cours
32025-04-05139.80Préparée
42025-04-073149.00Livrée

Table LIGNE_COMMANDE:

id_ligne_commandeid_commandeid_produitquantiteprix_unitaire
111225.50
213316.99
3221799.99
433219.90
5461149.00

Instructions pour l’insertion (À faire par vous) :

Utilisez l’instruction INSERT INTO pour ajouter ces données dans les tables correspondantes. Par exemple :

SQL

INSERT INTO CLIENT (id_client, nom, prenom, email, adresse, telephone)
VALUES (1, 'Dupont', 'Jean', 'jean.dupont@email.com', '10 rue de la Paix, 75001 Paris', '01 23 45 67 89');

-- Et ainsi de suite pour toutes les tables et toutes les lignes de données.

4. Requêtes SQL (Beaucoup !) (À faire par vous)

Voici une longue liste de requêtes SQL que vous devez essayer d’écrire et d’exécuter sur votre base de données.

Requêtes Simples (SELECT, FROM, WHERE):

  1. Affichez tous les clients.
  2. Affichez les noms et prénoms des clients.
  3. Affichez tous les produits.
  4. Affichez les noms et prix des produits.
  5. Affichez les produits dont le prix est supérieur à 50€.
  6. Affichez les produits de la catégorie ‘Livres’.
  7. Affichez les commandes passées par le client dont l’id est 1.
  8. Affichez les lignes de commande pour la commande dont l’id est 2.
  9. Affichez les fournisseurs situés à ‘20 avenue de la Tech, 69100 Villeurbanne’.
  10. Affichez les produits dont le stock est inférieur à 30.

Requêtes avec JOIN (INNER JOIN):

  1. Affichez les noms des clients et les dates de leurs commandes.
  2. Affichez les noms des produits et les noms de leurs catégories.
  3. Affichez les noms des produits et les noms de leurs fournisseurs.
  4. Affichez les détails des lignes de commande (id_commande, nom_produit, quantite, prix_unitaire).
  5. Affichez les noms des clients et le nombre de commandes qu’ils ont passées.
  6. Affichez les noms des catégories et le nombre de produits dans chaque catégorie.
  7. Affichez les noms des fournisseurs et le nombre de produits qu’ils fournissent.
  8. Affichez les commandes avec le nom du client qui les a passées et le montant total.
  9. Affichez les lignes de commande avec le nom du produit et le nom de la commande associée.
  10. Affichez les produits avec leur catégorie et le nom du fournisseur.

Requêtes avec fonctions d’agrégation (COUNT, SUM, AVG, MIN, MAX) et GROUP BY, HAVING:

  1. Comptez le nombre total de clients.
  2. Comptez le nombre total de produits.
  3. Comptez le nombre de commandes.
  4. Calculez le montant total de toutes les commandes.
  5. Calculez le prix moyen de tous les produits.
  6. Affichez le prix le plus élevé et le prix le moins élevé des produits.
  7. Comptez le nombre de produits par catégorie.
  8. Calculez le montant total des commandes par client.
  9. Affichez les clients qui ont passé plus d’une commande.
  10. Affichez les catégories ayant plus de 2 produits.
  11. Calculez le montant moyen des commandes livrées.
  12. Trouvez le client qui a dépensé le plus d’argent.
  13. Trouvez la catégorie de produit la plus chère en moyenne.

Requêtes avec LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN:

  1. Affichez tous les clients et leurs commandes (même ceux qui n’ont pas passé de commande).
  2. Affichez toutes les commandes et les clients qui les ont passées (même s’il y a des commandes sans client - peu probable dans ce modèle).
  3. Affichez tous les produits et leurs catégories (même les produits sans catégorie - peu probable).
  4. Affichez toutes les catégories et les produits associés (même les catégories sans produits).
  5. Affichez tous les fournisseurs et les produits qu’ils fournissent (même les fournisseurs sans produits et les produits sans fournisseur).

Requêtes avec sous-requêtes:

  1. Affichez les produits dont le prix est supérieur au prix moyen de tous les produits.
  2. Affichez les clients qui ont passé au moins une commande dont le montant total est supérieur à 100€.
  3. Affichez les produits de la catégorie ayant le plus grand nombre de produits.
  4. Affichez les clients qui ont commandé le produit le plus cher.
  5. Affichez les commandes contenant un produit de la catégorie ‘Électronique’.

Requêtes de modification de données (UPDATE, DELETE):

  1. Augmentez de 10% le prix de tous les produits de la catégorie ‘Livres’.
  2. Mettez à jour le stock du produit ‘Smartphone dernier modèle’ à 30.
  3. Changez l’état de la commande dont l’id est 2 à ‘Expédiée’.
  4. Supprimez le client dont l’id est 4. (Attention aux contraintes de clés étrangères !)
  5. Supprimez toutes les lignes de commande pour la commande dont l’id est 3.
  6. Réduisez le stock de tous les produits de 5 unités.

Requêtes avancées (si pertinent pour SQLite):

  1. Créez une vue qui affiche le nom du client et le montant total de ses commandes.
  2. Sélectionnez toutes les informations de cette vue.

Amusez-vous bien avec cet exercice ! N’hésitez pas si vous avez des questions sur la création de la base de données ou l’insertion des données. Je suis là pour vous aider à chaque étape (sauf pour les corrections des requêtes pour le moment 😉).