TP DW - Sujet TP 1

Transcription

TP DW - Sujet TP 1
Entrepôts de données
Démarrage :
TP N°1
Télécharger
la
base
de
données
TEDECA
http://www.irit.fr/~Gilles.Hubert/supports/TEDECA.mdb.
M1 IO
à
l’adresse
suivante :
La base de données est constituée des tables et 'relations' suivantes :
A) Révisions concernant le langage SQL
A l'aide du langage SQL, créer les requêtes de sélection répondant aux questions suivantes :
Q1. Obtenir les Clients qui n’ont acheté aucun matériel de la famille "Caisse PC".
Q2. Obtenir les matériels achetés par les clients ayant acheté pour plus de 6000 euros en mars 2008.
Q3. Obtenir la liste des agences de la zone en tête des ventes (en termes de montant total des ventes)
en février 2008.
B) Approfondissement concernant le langage SQL
Le langage SQL, permet de définir/modifier/supprimer les éléments d’une base de données notamment les
tables.

Création de table par requête de définition
La création d’une table à l’aide du langage SQL s’effectue par l’instruction CREATE TABLE.
Exemple : CREATE TABLE MATABLE1
(MONATTRIBUT11 CHAR(20),
MONATTRIBUT12 LONG,
CONSTRAINT clé_primaire_matable1 PRIMARY KEY(MONATTRIBUT1));
Les noms des types de données usuels en Access à utiliser en SQL dans Access sont les
suivants :
- Booléen : BIT
- Nombre entier : SHORT ou SMALLINT (entier), LONG ou INTEGER (entier long), BYTE
(octet)
- Nombre réel : SINGLE (réel simple), DOUBLE ou NUMERIC (réel double)
- Monétaire : CURRENCY, MONEY
- Date/Heure : DATE, TIME, DATETIME ;
- Texte : VARCHAR (255 caractères), CHAR(n) ou TEXT(n) (n caractères), LONGTEXT
(mémo, 32K max.) ;
- Compteur : COUNTER (NuméroAuto).
IUP IO – M1
1/7
Entrepôts de données
TP N°1
M1 IO
Rappel : La création d’une table implique obligatoirement la désignation d’une clé primaire
(PRIMARY KEY).
La création des relations entre tables s’effectue au travers de l’ajout et la désignation d’attribut
clé étrangère (FOREIGN KEY).
Exemple : CREATE TABLE MATABLE2
(MONATTRIBUT21 LONG,
MONATTRIBUT22 DATE,
MONATTRIBUT23 CHAR(20),
CONSTRAINT clé_primaire_matable2 PRIMARY KEY(MONATTRIBUT21),
CONSTRAINT clé_étrangère_matable2 FOREIGN KEY(MONATTRIBUT23)
REFERENCES MATABLE1 (MONATTRIBUT11));
Q4. Créer à l’aide du langage SQL la table Contrat avec les caractéristiques suivantes : une
référence de type texte de 10 caractères qui sera la clé primaire, et une date de début. La table
Contrat aura une clé étrangère vers la table Client et l’attribut NumClient.
Le langage SQL, permet également d’ajouter/modifier/supprimer des enregistrements dans une base de
données.

Ajout de données dans une table par requête
L’ajout d’un enregistrement à l’aide du langage SQL s’effectue à l’aide de l’instruction INSERT.
Exemple : INSERT INTO MATABLE2 VALUES (1, #01/24/2009#, "toto");
Q5. Ajouter à l’aide du langage SQL dans la table Contrat les enregistrements suivants : le contrat
A000000001 qui a débuté le 04/06/2009 signé par le client 1 et le contrat A000000002 qui a
débuté le 21/07/2009 signé par le client 4.

Mise à jour de données dans une table par requête
La mise à jour d’un enregistrement à l’aide du langage SQL s’effectue à l’aide de l’instruction
UPDATE.
Exemple : UPDATE MATABLE2 SET MONATTRIBUT22 = #01/20/2009# WHERE
MONATTRIBUT23 = "toto";
Q6. Mettre à jour à l’aide du langage SQL, le contrat A000000002 en modifiant la date de début au
21/08/2009.

Suppression de données dans une table par requête
La mise à jour d’un enregistrement à l’aide du langage SQL s’effectue à l’aide de l’instruction
DELETE.
Exemple : DELETE FROM MATABLE2 WHERE MONATTRIBUT23 = "toto";
Remarque : Sans clause WHERE l’instruction DELETE supprime tous les enregistrements de
la table
Q7. Supprimer à l’aide du langage SQL les contrats du mois de juin 2009.

Ajouter des données résultant d’une requête dans une table par requête
L’ajout d’enregistrement issus d’une requête SELECT s’effectue en combinant INSERT et
SELECT.
Exemple : INSERT INTO MATABLE2 (MONATTRIBUT21) SELECT MONATTRIBUT12
FROM MATABLE1;
Remarque : Sans clause WHERE, l’instruction INSERT ajoute autant d’enregistrements dans la
table MATABLE2 que d’enregistrements de la table MATABLE1
IUP IO – M1
2/7
Entrepôts de données
TP N°1
M1 IO
Q8. Ajouter à l’aide du langage SQL dans la table Contrat un contrat pour chaque client à partir du
numéro 10 avec comme référence A0000000 suivi du numéro de client, et comme date de début
de contrat la date de début présente dans la table Client.
C) Approfondissement concernant le langage graphique ACCESS
Le langage graphique Access, permet également d’ajouter/modifier/supprimer des enregistrements dans
une base de données.

Mise à jour de données dans une table par requête
La mise à jour d’enregistrements à l’aide du langage graphique ACCESS s’effectue :
- en créant une requête de sélection de manière habituelle (Mode création) pour obtenir
les enregistrements concernés par la mise à jour
- puis en transformant la requête en requête de mise à jour (Menu Requêtes/Requête
Mise à jour …)
- et en indiquant au niveau de la requête les modifications à réaliser pour les champs
concernées.
Q9. Mettre à jour à l’aide du langage graphique Access la date du contrat du client MegaMarket à la
date du 05/05/2008.

Suppression de données dans une table par requête
La mise à jour d’enregistrements à l’aide du langage graphique ACCESS s’effectue :
- en créant une requête de sélection de manière habituelle (Mode création) pour obtenir
les enregistrements concernés par la suppression
- puis en transformant la requête en requête de suppression (Menu Requêtes/Requête
Suppression …)
Q10.
Supprimer à l’aide du langage graphique Access le contrat A000000015.

Ajouter des données résultant d’une requête dans une table par requête
L’ajout d’un enregistrement à l’aide du langage graphique ACCESS s’effectue :
- en créant une requête de sélection de manière habituelle (Mode création) pour obtenir
les enregistrements à ajouter
- puis en transformant la requête en requête d’ajout (Menu Requêtes/Requête Ajout …)
- et en indiquant la table de destination dans la boîte de dialogue qui s’ouvre
- et en indiquant au niveau de la requête les correspondances entre les champs.
Ajouter à l’aide du langage graphique Access les contrats pour les clients 5 et 6 avec des
références du type A00000000X avec X numéro du client et la date de début de client comme
date de début de contrat.
Q11.
Attention : Les modifications apportées aux enregistrements par l’intermédiaire de requêtes
sont irréversibles.
D) Premiers pas vers la combinaison VBA et le langage de requête
Il est possible d’utiliser les requêtes pour transformer/calculer/extraire des données. Cela concerne aussi
bien aussi bien les requêtes définies à l'aide du langage graphique Access et les requêtes définies en SQL.
Pour cela, on peut utiliser de nombreuses fonctions pré-définies dans Access ou définir en VBA ces
propres fonctions de transformation/calcul/extraction.
IUP IO – M1
3/7
Entrepôts de données
TP N°1
M1 IO
Fonctions VBA prédéfinies utiles (la disponibilité dépend de la version d’Access)

Fonctions de chaînes de caractères
InStr(Chaîne, chaînecherchée) : Renvoie la position de la première occurrence d'une chaîne de caractères
(chaînecherchée) dans une autre chaîne (Chaîne) à partir du début (InStrRev cherche à partir de la fin).
LCase(Chaîne) : Renvoie une chaîne convertie en minuscules.
Left(Chaîne, Longueur) : Renvoie une chaîne contenant le nombre indiqué de caractères (Longueur) d'une
chaîne en partant de la de la gauche.
Len(Chaîne) Renvoie une valeur de type Long contenant le nombre de caractères d'une chaîne.
Replace(Chaîne, SousChaîneCherchée, SousChaîneRemplacement) : Renvoie une chaîne dans laquelle
une sous-chaîne (SousChaîneCherchée) spécifiée a été remplacée par une autre sous-chaîne
(SousChaîneRemplacement).
Right(Chaîne, Longueur) : Renvoie une chaîne contenant le nombre indiqué de caractères (Longueur)
d'une chaîne en partant de la droite.
Str(valeur) : Renvoie une chaîne représentant un nombre.
StrComp(Chaîne1, Chaîne2) : Renvoie une valeur (Integer) indiquant le résultat d'une comparaison de
chaînes.
Trim(Chaîne) : Renvoie une chaîne moins les espaces de gauche et de droite.
UCase(valeur) Renvoie une la chaîne indiquée convertie en majuscules.
…

Fonctions de date :
Date() : Renvoie la date système actuelle.
DateAdd(niveau, valeur, valeurdate) : Renvoie une date/heure correspondant à la date à laquelle un
intervalle de temps (niveau) a été ajouté (ou retranché). Les valeurs possibles pour niveau sont "yyyy"
pour année, "q" pour trimestre, "m" pour mois, "y" pour jour de l'année, "d" pour jour, "w" pour numéro
de la semaine, "ww" pour semaine de l'année, "h" pour heure, "n" pour minute, ou "s" pour seconde.
DateDiff(niveau, valeurdate1, valeurdate2) : Renvoie une valeur (Long) indiquant l’écart suivant le
niveau temporelle entre deux dates données. Les valeurs possibles pour niveau sont les mêmes que pour
DateAdd.
DatePart(niveau, valeurdate) : Renvoie une valeur de contenant l'élément spécifié d'une date donnée. Les
valeurs possibles pour niveau sont les mêmes que pour DateAdd.
DateSerial(Année, Mois, Jour) : Renvoie une date correspondant à la combinaison des 3 valeur.
DateValue(Chaîne) : Renvoie une date correspondant à une chaîne de caractères.
Day(valeurdate) Renvoie une valeur de type Variant (Integer) indiquant un nombre entier compris entre 1
et 31, inclus, qui représente le jour du mois.
Hour(valeurheure) Renvoie une valeur de type Variant (Integer) indiquant un nombre entier compris entre
0 et 23 inclus, qui représente l'heure du jour.
Minute(valeurheure) Renvoie une valeur de type Variant (Integer) indiquant un nombre entier compris
entre 0 et 59, inclus, qui représente la minute de l'heure en cours.
Month(valeurdate) Renvoie le numéro de mois (1 à 12).
IUP IO – M1
4/7
Entrepôts de données
TP N°1
M1 IO
Now() Renvoie une valeur de type Variant (Date) indiquant la date et l'heure en cours fournies par la date
et l'heure système de votre ordinateur.
Time() Renvoie une valeur de type Variant (Date) indiquant l'heure système en cours.
Year(valeurdate) Renvoie une valeur de type Variant (Integer) contenant un nombre entier qui représente
l'année.
…

Fonctions mathématiques :
Abs(valeur) : Renvoie la valeur absolue d'un nombre.
Fix(valeur) : Renvoie la partie entière d'un nombre.
Int(valeur) : Renvoie la partie entière d'un nombre.
Round(valeur, nbdécimales) : Renvoie un nombre arrondi à un nombre spécifié de positions décimales.
Sgn(valeur) : Renvoie une valeur de type Variant (Integer) indiquant le signe d'un nombre.
Sqr(valeur) : Renvoie une valeur de type Double indiquant la racine carrée d'un nombre.
Val(Chaîne) : Renvoie le nombre contenu dans une chaîne de caractère sous la forme d'une valeur
numérique d'un type approprié.
…

Fonctions de formatage :
Format(Chaîne, expressionformat) : Renvoie une chaîne formatée en fonction des instructions contenues
dans l'expression de mise en forme.
Mises en formes possibles :

Pour les dates et heures
Formes prédéfinies parmi "General Date" : Date, générale, "Long Date" : Date, complet, "Medium Date" :
Date, réduit, "Short Date" : Date, abrégé, "Long Time" : Heure, complet, "Medium Time" : Heure, réduit,
ou "Short Time" : Heure, abrégé
Combinaisons de lettres "h (heure), m (minute), s (seconde), d (jour), m (mois), ou y (année), exemples :
Format(#17:04:23#, "h:m:s") renvoie "17:4:23".
Format(#17:04:23#, "hh:mm:ss AM/PM") renvoie "05:04:23 PM".
Format(#9/20/2008#, "dddd d mmm yyyy") renvoie "samedi 20 septembre 2008"

Pour les nombres
Formes prédéfinies parmi "General Number" (nombre sans séparateur de milliers), "Currency" (séparateur
de milliers, 2 décimales et sigles monétaire), "Fixed" (2 décimales), "Standard" (séparateur de milliers, 2
décimales), "Percent" (pourcentage), "Scientific" (notation scientifique), "Yes/No" (Oui ou Non),
"True/False" (Vrai ou Faux), ou "On/Off".
Combinaisons de caractères '#' (chiffre affiché si présent), '0' (chiffre affiché si présent ou 0), '.'
(séparateur décimales), ',' (séparateur milliers), exemples :
Format (130.6, "#,##0.00") renvoie '130,60'
Format (130.6, "0,000.00") renvoie '0 130,60'
IUP IO – M1
5/7
Entrepôts de données

TP N°1
M1 IO
Pour les chaînes de caractères
Les formes possibles pour les dates/heures et nombres sont applicables si les chaînes peuvent
correspondre à des valeurs numériques ou de date/heure, exemple : Format ("Sep 3, 2003", "Short Date")
renvoie '9/3/2003'
…

Fonctions logiques :
IsDate(variable) : Renvoie un booléen qui indique si une valeur peut être convertie en date.
IsEmpty(variable) : Renvoie un booléen indiquant si une variable a été initialisée.
IsNull(variable) : Renvoie un booléen indiquant si une valeur ne contient aucune donnée valide (Null).
IsNumeric(variable) : Renvoie un booléen indiquant si une valeur peut être interprétée comme un nombre.
…

Fonctions de conversion :
CDate(valeur) convertit une valeur en une Date.
CStr(valeur) convertit une valeur en une chaîne de caractères.
…
Exemples :
SELECT UCase(MONATTRIBUT11) FROM MATABLE1;
Permet d’obtenir les valeurs de l’attribut MONATTRIBUT11 pour les enregistrements de la table
MATABLE1, en majuscules.
SELECT Left(MONATTRIBUT11,1) FROM MATABLE1;
Permet d’obtenir le premier caractère de l’attribut MONATTRIBUT11 pour les enregistrements
de la table MATABLE1.
SELECT Format(MONATTRIBUT22,”dddd-d-mmmm-yyyy”) FROM MATABLE1;
Permet d’obtenir la date correspondant à l’attribut MONATTRIBUT22 pour les enregistrements
de la table MATABLE2 sous la forme : samedi-25-novembre-2000.
A l'aide du langage SQL et des fonctions prédéfinies, créer les requêtes de sélection répondant aux
questions suivantes :
Q12.
Obtenir les dates de fin de garantie de chaque matériel si on considère une garantie d’un an.
Q13.
Obtenir les dates de début des clients sous la forme anglaise (mois/jour/année).
Q14.
Obtenir les délais (en jours) entre les dates d’installation et les dates de vente des matériels.
Q15.
Obtenir le code pays et le code région du numéro de téléphone de chaque client.
Q16.
Obtenir le numéro de rue dans l’adresse de chaque client.
IUP IO – M1
6/7
TP N°1
Entrepôts de données
M1 IO
Fonctions VBA personnalisées
Il est possible de définir et d’utiliser ses propres fonctions VBA dans des requêtes. La définition de
fonctions s’effectue de manière habituelle au sein d’un module avec l’éditeur Visual Basic (Menu Outils /
Macros/ Visual Basic Editor dans Access puis Menu Insertion / Module dans Visual Basic Editor). La
structure d’une fonction reste la suivante :
Function Nom_Fonction([argument1 As Type_argument1, argument2 As Type_argument2, …)
As Type_résultat
Liste d'instructions
Nom_Fonction = valeur/expression
End Function
Exemples :
Function RenvoieRien()
RenvoieRien = "Rien"
End Function
Utilisée dans une requête SELECT RenvoieRien() FROM MATABLE1 affiche le mot « Rien » autant
de fois qu’il y a d’enregistrements dans la table MATABLE1.
Function TTC(val1 As Double) As Double
Dim Res As Double
Res = 0.196 * val1
TTC = Res
End Function
Utilisée dans une requête SELECT TTC(PrixHT) FROM VENTES calcule le montant TTC à partir de
l’attribut PrixHT pour tous les enregistrements de la table VENTES.
A l'aide du langage SQL et de l’éditeur Visual Basic, créer les fonctions et les requêtes de sélection
répondant aux questions suivantes :
Obtenir la liste des clients avec l’indication "avant 2000" ou "depuis 2000" selon la date de
début.
Q17.
Q18.
Obtenir la liste des numéros de matériels modifiés tels que le chiffre 1 soit ajouté devant
les numéros commençant par la lettre a et que le chiffre 2 soit ajouté devant les autres numéros
de matériels.
Q19.
Obtenir une liste de codes clients générés automatiquement en prenant les 2 premières
lettres du nom et les chiffres de la date de début.
Q20.
Obtenir la liste des
"(+XX)X.XX.XX.XX.XX".
IUP IO – M1
clients
avec
les
numéros
de
Fax
sous
la
forme
7/7