Objectif de cet exercice : Calculer un chiffre d'affaire par client et connaitre sa localisation départementale.
3 Tables :
Départements (Numéro département + Nom)
Client (Identification Client + Nom + Numéro département)
Chiffre d'affaire (Identification Client + Montant)
La base de données sera de type SQLite en mémoire.
Pour faire une jointure entres deux tables (TableA et TableB) ayant un identifiant commun (id) on utilisera la syntaxe suivante
Code : Tout sélectionner
SELECT *
FROM tableA
JOIN tableB
ON tableA.id = tableB.id ;
Code : Tout sélectionner
Enumeration
#DataBase
EndEnumeration
UseSQLiteDatabase()
Global ReqSql.s
If OpenDatabase(#DataBase, ":memory:", "", "")
Debug "Connecté"
;Creation de la table département
ReqSql = "CREATE TABLE departements ("
ReqSql + "numdep INTEGER," ;Numéro de département
ReqSql + "nom TEXTE" ;Libéllé du département
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
Debug DatabaseError()
;Creation de la table client
;l'identification client est une clé automatique autoincrémentée
ReqSql = "CREATE TABLE clients ("
ReqSql + "idcli INTEGER PRIMARY KEY," ;Identifiant client automatiquement incrémenté
ReqSql + "nom TEXT," ;Nom
ReqSql + "numdep INTEGER" ;Numéro de département
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
Debug DatabaseError()
;Creation de la table chiffre d'affaire
ReqSql = "CREATE TABLE ca ("
ReqSql + "idcli INTEGER,"
ReqSql + "montant INTEGER"
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
Debug DatabaseError()
;Ajouts de quelques données dans les tables Departement
;On insere le département + le nom du département
DatabaseUpdate(#DataBase, "insert into departements(numdep, nom) values('1','Ain')")
DatabaseUpdate(#DataBase, "insert into departements(numdep, nom) values('2','Aisne')")
DatabaseUpdate(#DataBase, "insert into departements(numdep, nom) values('3','Allier')")
DatabaseUpdate(#DataBase, "insert into departements(numdep, nom) values('4','Alpes-de-Haute-Provence')")
;Ajouts de quelques données dans les tables clients
;On insere le numéro du département ainsi que le nom du client
;Le numéro de département (numdep) pointe sur la table des départements (numdep)
DatabaseUpdate(#DataBase, "insert into clients(numdep, nom) values('1','Joe Palier')") ;identification client = 1
DatabaseUpdate(#DataBase, "insert into clients(numdep, nom) values('2','Jia Abalur')") ;identification client = 2
DatabaseUpdate(#DataBase, "insert into clients(numdep, nom) values('4','William Dufi')") ;identification client = 3
DatabaseUpdate(#DataBase, "insert into clients(numdep, nom) values('4','Camelia Rosana')") ;identification client = 4
;Ajouts de quelques données dans les tables Chiffre d'Affaire (ca)
;On insere l'identification client (idcli) + le montant du chiffre d'affaire (montant)
;l'identification client (idcli) pointe sur la table client (idcli)
DatabaseUpdate(#DataBase, "insert into ca(idcli, montant) values('1','100')")
DatabaseUpdate(#DataBase, "insert into ca(idcli, montant) values('4','100')")
DatabaseUpdate(#DataBase, "insert into ca(idcli, montant) values('1','200')")
DatabaseUpdate(#DataBase, "insert into ca(idcli, montant) values('1','400')")
;Chiffre d'affaire client
ReqSql = "SELECT clients.nom, sum(ca.montant), departements.nom"
ReqSql + " FROM clients "
ReqSql + " JOIN departements"
ReqSql + " JOIN ca"
ReqSql + " ON (clients.idcli = ca.idcli) AND (clients.numdep = departements.numdep)"
ReqSql + " GROUP BY clients.idcli"
DatabaseQuery(0, ReqSql)
Debug DatabaseError()
;Affichage du résultat de la requete
While NextDatabaseRow(0)
Debug GetDatabaseString(0, 0) + " | " + GetDatabaseString(0, 1)+ " | " + GetDatabaseString(0, 2)
Wend
Else
Debug DatabaseError()
EndIf
Pour avoir un calcul par client, je l'ai associé avec la clause GROUP BY (Fonction qui calcule le niveau de regroupement)
Résultat
N'étant pas un sujet traitant de la 3D, je comprends que ce n'est pas forcement palpitant :p Toutefois Pure Basic est aussi un puissant gestionnaire de base de données SQLite (en natif), PostgreSQL( en natif) et d'autres bases de données comme MySQl moyennant l'utilisation d'un fichier include faisant le lien entre Pure Basic et une DLL (ici libmysql.dll) gérant les transasctions avec cette base de données.Connecté
Joe Palier | 700 | Ain
Camelia Rosana | 100 | Alpes-de-Haute-Provence