Et si vous appreniez à manipuler de l’information ? – (les bases du SQL)

Chaque ligne sera une entrée unique d’information. Cette table va s’appeler « Customer ». Elle continent toutes les informations disponibles pour chaque client. Une ligne par client, pas deux ni trois donc.

Imaginons maintenant qu’il s’agisse d’une société qui commercialise des produits d’électroménager, nous aurons dans ce cas une deuxième table qui va s’appeler « Sales »  dans laquelle on va venir enregistrer sur chaque ligne chaque nouvelle vente réalisée.

Le principe de base est le suivant : chaque table a un but et enregistre une information particulière.

On peut aussi imaginer créer d’autres tables dans lesquelles on pourrait enregistrer les stocks associés à chaque produit, ou encore une autre table dans laquelle on aurait les prix des produits et les promotions associées, une autre contenant tous les fournisseurs, la liste est longue.

L’important comme vous pouvez vous en douter est de pouvoir relier les tables entre elles par des clés, des ID (ID pour identifiants).

Ainsi dans le cas présenté –très simple- vous allez pouvoir associer à chaque personne le nombre de ventes réalisées.

Nous apprenons donc que nous avons 3 acheteurs pour les 6 produits vendus étudiés ce jour là.

En langage SQL, cela donnerait :

 

 

Select COUNT(DISTINCT ID) AS NB_ACHETEURS
, COUNT(*) AS NB_VENTES

FROM CUSTOMER c

INNER JOIN SALES s ON(c.ID=s.ID)

 

 

Décortiquons ces lignes de code.

On ne demande dans la clause FROM que les lignes qui ont des correspondances dans les 2 tables sur le champ ID. De fait, toutes les personnes enregistrées dans la base de gauche qui n’ont pas fait d’achat ce jour là ne seront pas comptées.

C’est la clause INNER JOIN qui pose cette condition d’égalité. Si l’on avait mis à la place une clause LEFT JOIN, cela nous aurait ramené  toutes les lignes de la table de gauche et nous n’aurions pas eu le même résultat.

Le count(*) se charge de compte le nombre de lignes. Nous avons 6 ventes donc le résultat retourné est de 6.

On demande ensuite le count(distinct ID), ce qui revient à compter le nombre d’acheteurs différents. On a 3 acheteurs différents.

En l’état on pouvait se passer de la jointure entre les tables mais si maintenant nous cherchons à ne faire un tri que sur une année précise (admettons que l’on fasse une étude marketing sur les résultats par tranche d’âge), on pourrait écrire la requête suivante :

 

 

Select COUNT(DISTINCT ID) AS NB_ACHETEURS

, COUNT(*) AS NB_VENTES

FROM CUSTOMER c

INNER JOIN SALES s ON(c.ID=s.ID)

WHERE c.annee_naissance<1950

 

 

De fait nous aurions eu un seul résultat, celui de René Jiop, né en 1940 et qui a acheté un Ipod rose (Il a très bien pu l’offrir).

Les tables de données relationnelles sont très puissantes pour mener à bien de l’analyse, faire remonter des informations dans des interfaces aux visiteurs d’un site ou établir des factures…les applications concrètes du SQL et des données relationnelles sont nombreuses.

Likez la page pour ne rater aucun article!