---
title: 04 – Construire notre première requête SQL
description: "## 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.…"
url: "https://wiki.biboard.fr/wiki/04-construire-notre-premiere-requete-sql/"
updated: "2026-07-23"
category: "Parcours d'apprentissage / Initiation"
---

# 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](https://wiki.biboard.fr/wiki/construire-notre-premiere-requete-sql/#14-toc-title) ;
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

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Connexion-1024x612.png)

### Paramètre

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Parametre-1-1024x617.png)

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

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Resultat-requete-00-1024x617.png)

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Resultat-requete-01-1024x617.png)

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

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Resultat-requete-02-1024x617.png)

![](https://wiki.biboard.fr/wp-content/uploads/2026/07/CP-C1-Resultat-requete-03-1024x617.png)

---
