View Categories

04 – Construire notre première requête SQL

Objectif de cette étape #

Nous allons construire la requête détaillée qui servira au tableau des commandes.
Cette première requête est volontairement la plus complète. Elle permet de comprendre les relations entre les tables avant de créer les indicateurs agrégés.

Créer la requête dans BiBOARD #

Dans l’interface de gestion des requêtes :

  1. créez une nouvelle requête ;
  2. sélectionnez la connexion Demonstration ;
  3. nommez la requête :
PARCOURS_01_DETAIL_COMMANDES
  1. créez un paramètre texte nommé :
pPays
  1. définissez sa valeur par défaut à :
#NULL
  1. saisissez la requête SQL suivante.

Requête SQL #

SELECT
    CAST(co.NumCommande AS varchar(20))
        + '-'
        + CAST(p.CodeProduit AS varchar(20)) AS CleLigne,
    co.NumCommande,
    co.DateCommande,
    cl.CodeClient,
    cl.RaisonSociale AS Client,
    cl.Pays,
    p.CodeProduit,
    p.NomProduit,
    cat.NomCategorie AS Categorie,
    cd.Quantite,
    cd.Prix AS PrixUnitaire,
    cd.Remise,
    CAST(
        cd.Prix * cd.Quantite
        AS decimal(18, 2)
    ) AS MontantBrut,
    CAST(
        cd.Prix * cd.Quantite * (1 - cd.Remise)
        AS decimal(18, 2)
    ) AS MontantNet
FROM Demonstration.dbo.Commandes AS co
INNER JOIN Demonstration.dbo.Clients AS cl
    ON cl.CodeClient = co.CodeClient
INNER JOIN Demonstration.dbo.Commandes_Details AS cd
    ON cd.NumCommande = co.NumCommande
INNER JOIN Demonstration.dbo.Produits AS p
    ON p.CodeProduit = cd.CodeProduit
INNER JOIN Demonstration.dbo.Categories AS cat
    ON cat.CodeCategorie = p.NumCategorie
WHERE co.DateCommande IS NOT NULL
  AND (
        :pPays = '#NULL'
        OR cl.Pays = :pPays
      )
ORDER BY
    co.DateCommande DESC,
    co.NumCommande DESC,
    p.NomProduit;

Comprendre le bloc SELECT #

Le bloc SELECT définit les colonnes retournées par la requête.

co.NumCommande,
co.DateCommande

Ces champs identifient et datent la commande.

cl.RaisonSociale AS Client,
cl.Pays

Ils permettent d’afficher le client et son pays.

p.NomProduit,
cat.NomCategorie AS Categorie

Ils décrivent le produit et sa famille.

La clé de ligne #

CAST(co.NumCommande AS varchar(20))
    + '-'
    + CAST(p.CodeProduit AS varchar(20)) AS CleLigne

Une ligne de commande est identifiée par la combinaison :

Numéro de commande + Code produit

La clé obtenue pourra être utile pour identifier précisément une ligne dans un tableau ou lors de futures interactions.

Calculer le montant brut #

cd.Prix * cd.Quantite

Exemple :

Prix : 20 €
Quantité : 3
Montant brut : 60 €

Calculer le montant net #

cd.Prix * cd.Quantite * (1 - cd.Remise)

Exemple avec une remise de 10 % :

20 × 3 × (1 - 0,10)
= 60 × 0,90
= 54 €

Comprendre les jointures #

INNER JOIN Demonstration.dbo.Clients AS cl
    ON cl.CodeClient = co.CodeClient

Cette jointure permet de retrouver le client d’une commande.

INNER JOIN Demonstration.dbo.Commandes_Details AS cd
    ON cd.NumCommande = co.NumCommande

Cette jointure permet de retrouver les lignes de produits de la commande.

INNER JOIN Demonstration.dbo.Produits AS p
    ON p.CodeProduit = cd.CodeProduit

Cette jointure permet de retrouver le nom du produit.

INNER JOIN Demonstration.dbo.Categories AS cat
    ON cat.CodeCategorie = p.NumCategorie

Cette jointure permet de retrouver la catégorie du produit.

Comprendre le filtre #

WHERE co.DateCommande IS NOT NULL

Nous excluons les lignes ne possédant pas de date de commande.

AND (
      :pPays = '#NULL'
      OR cl.Pays = :pPays
    )

Ce bloc signifie :

  • si aucun pays n’est sélectionné, retourner tous les pays ;
  • sinon, retourner uniquement le pays sélectionné.

La valeur spéciale #NULL est utilisée dans BiBOARD pour représenter un paramètre texte vide ou non renseigné.

Tester la requête #

Premier test #

Exécutez la requête avec :

pPays = #NULL

Vous devez obtenir des commandes de plusieurs pays.

Deuxième test #

Exécutez la requête avec un pays présent dans la base, par exemple :

France

Toutes les lignes retournées doivent alors concerner ce pays.

Points à vérifier #

  • NumCommande est renseigné ;
  • DateCommande est une date ;
  • MontantBrut est supérieur ou égal à MontantNet ;
  • Pays correspond au client ;
  • une commande peut apparaître plusieurs fois lorsqu’elle contient plusieurs produits ;
  • CleLigne ne doit pas être vide.

Résultat attendu
Vous disposez maintenant d’une requête détaillée présentant une ligne par produit commandé.

Captures #

  • [Déclaration du paramètre pPays]
  • [Aperçu du résultat de la requête]

Connexion base Demonstration #

Paramètre #

Résultat de la requête (= #NULL) #

Résultat de la requête (= France) #


Retour en haut