Requ - PowerPoint PPT Presentation

1 / 47
About This Presentation
Title:

Requ

Description:

Title: PowerPoint Presentation Last modified by: Fr d ric Gava Created Date: 1/1/1601 12:00:00 AM Document presentation format: Affichage l' cran – PowerPoint PPT presentation

Number of Views:87
Avg rating:3.0/5.0
Slides: 48
Provided by: upe69
Category:
Tags: requ

less

Transcript and Presenter's Notes

Title: Requ


1
Requêtes SQL par lexemple
Frédéric Gava (MCF) gava_at_univ-paris12.fr LACL,
bâtiment P2 du CMC, bureau 223 Université de
Paris XII Val-de-Marne 61 avenue du Général de
Gaulle 94010 Créteil cedex
2
Généralités
  • Cette présentation ne se veut pas exhaustif
  • SQL comprend de nombreux autres choses non
    décrites ici (manque temps ou trop technique)
  • Pour plus de détails, je vous conseil les
    références suivantes
  •  SQL pour les nuls 
  • cours sur internet
  • livres
  • SQL comprend
  • Un langage de définition des données (LDD)
  • Un langage de manipulation des données (LMD)
  • SQL  Structured Query Language 
  • Il existe une version graphique des requêtes SQL
    sous Microsoft Access. Nétant pas  standard ,
    elle ne sera pas présenté ici. Vous trouverez
    néanmoins un cours par un anonyme sur ma page web

3
Le langage de définition des données
4
Les tables et types
  • Nous souhaitons créer les tables suivantes
  • Client(NumCl, NomCl, AdresseCl, CodePost, Ville,
    Tél)
  • Article(NumAr, Designation, PrixUnité, QteStock)
  • Vendeur(NomVd, Qualité, Salaire, Commission)
  • Commande(NumCom, NumCl, NumVd, DateCom)
  • LigneCom(NumCom,NumLg, NumAr, QteCom)
  • Nous utiliserons les types de données suivants
  • CHAR(N) chaîne de caractère de longueur maxi N
  • INTEGER entier
  • NUMBER(N) nombre de longueur (en chiffre) maxi
    N
  • FLOAT réel (0.934 ou 14.3434 etc.)
  • DATE une date (format dépend du SGBD et du
    pays)
  • NULL valeur nulle

5
Retour sur les clés
  • Une clé primaire est une clé dune table qui est
    composée dune ou plusieurs (dit clé composée)
    attributs (colonnes) de la table et est utilisée
    pour identifier chaque ligne de manière unique.
    La clé primaire ne doit pas contenir de colonne
    valeur NULL.
  • Une clé unique possède les mêmes propriétés
    quune clé primaire à lexception quune colonne
    définie comme clé unique peut être NULL. Elle
    contrôle lunicité de la valeur
  • Une clé étrangère représente une relation entre
    les tables. Elle est composée dune ou plusieurs
    attributs (colonnes) dont les valeurs dépendent
    de clés primaires (ou uniques) dautres tables
  • On parle dintégrité référentielle quand on veut
    signifier que les relations représentées par les
    clés sont maintenues. Elle assure la cohérence
    des données.

6
Création de tables
  • CREATE TABLE Client (
  • NumCl INTEGER,
  • NomCl CHAR(20),
  • AdresseCL CHAR(20),
  • CodePost NUMBER(5),
  • Ville CHAR(20),
  • Tél NUMBER(8))
  • Création simple car pas de contraintes
    dintégrités (CI)
  • Nous rappelons quune CI est définie pour
    contrôler la validité des valeurs à insérer
  • Remarque nous écrirons en rouge et majuscule
    les mots clés en SQL. Cela nest pas obligatoire
    et ne sert que pour ces transparents.
  • CREATE TABLE permet donc de créer un nouvelle
    table en explicitant la liste des attributs de la
    table

7
Les contraintes
  • Les contraintes les plus importantes sont les
    suivantes
  • UNIQUE interdit davoir deux lignes ayant la
    même valeur pour cette colonne et les valeurs
    NULL sont autorisées
  • PRIMARY KEY spécifie que le colonne est
    utilisée comme clé primaire. Cela a donc le même
    effet que UNIQUE mais les valeurs ne peuvent être
    NULL
  • CHECK est un mot associé à une condition qui
    doit être vérifiée pour chaque valeur insérée
  • REFERENCES décrit une contraintes
    référentielle (clé étrangère) par rapport à une
    clé primaire dune autre table
  • PRIMARY KEY UNIQUE NOT NULL
  • En fait, CONSTRAINT est optionnel. Par contre,
    il permet de donner un nom à chaque contrainte
    qui sera sauvegardé dans le dictionnaire des
    données CONSTRAINT nom NOT NULL
  • Nous pouvons donc définir les tables

8
Exemples (1)
  • CREATE TABLE Client (
  • NumCl NUMBER CONSTRAINT PRIMARY KEY,
  • NomCl CHAR(20) CONSTRAINT NOT NULL,
  • CodePost NUMBER(5) CHECK (CodePost BETWEEN 100000
    AND 95999),
  • etc.)
  • BETWEEN permet dexpliciter les bornes de la
    valeur
  • DEFAULT permet de donner une valeur par défaut
    qui nest pas NULL quand on oublie dajouter une
    valeur pour cette attribut
  • CREATE TABLE Article (
  • NumAr NUMBER PRIMARY KEY,
  • Designation CHAR(40) CONSTRAINT ades NOT NULL,
  • PrixUnité NUMBER(7),
  • QteStock NUMBER DEFAULT 0)

9
Exemples (2)
  • CREATE TABLE Vendeur (
  • NumVd NUMBER PRIMARY KEY,
  • NomVd, CHAR(20) NOT NULL,
  • Qualité CHAR(2),
  • Salaire NUMBER(8) NOT NULL,
  • Com NUMBER(2) CHECK (Com BETWEEN 0 AND 100))
  • CREATE TABLE Commande (
  • NumCom NUMBER,
  • NumCl NUMBER REFERENCES Client(NumClient),
  • NumVd NUMBER REFERENCES Vendeur(NumVd)
  • DateCom DATE)

10
Exemples (3)
  • On peut aussi ajouter quelle est la clé
    (notamment quand elle est multiple) à la fin de
    la création. Exemple
  • CREATE TABLE LigneComm (
  • NumCom INTEGER,
  • Nligne INTEGER,
  • NumArticle NUMBER CONSTRAINT nlaid REFERENCE
    Article(NumArticle),
  • QteCom NUMBER NOT NULL CHECK (QteComgt0),
  • PRIMARY KEY (NumCom, Nligne))

11
Retour sur les  vues 
  • Une vue est une perception logique sur les
    données dune ou plusieurs tables (ou vues). Elle
    est définie à partir dune requête
    dinterrogation du LDD et hérite les mêmes
    caractéristique que les objets auquel elle se
    réfère (type, contraintes)
  • Les vues sont définies pour fournir un niveau de
    sécurité supplémentaire sur les données dune
    table (un avocat ne lit pas les données dun
    procureur)
  • Une vue ne nécessite aucune allocation mémoire
    pour obtenir les données, contrairement à une
    table. Sa consommation en ressources consiste
    seulement en sa définition dans le dictionnaire
    des données

12
Les vues en SQL
  • CREATE VIEW ClientParis (NumCl, NomCl, TélCl) AS
    SELECT NumCl, NomCl, TélCl FROM Client WHERE
    ville"Paris"
  • Suppression dune vue DROP VIEW ClientParis
  • COMMIT pour que le SGBD prennent en compte les
    modification physiquement (vues et modifications
    des tables de la suite de ce cours)

13
Le langage de manipulation des données
14
Insertion de valeurs
  • Il faut maintenant insérer des données dans les
    tables
  • Forme général INSERT INTO Table VALUES
    (données)
  • Exemple
  • INSERT INTO Client VALUES (1,"Delacroix", "45,
    rue Royal", 75008, "Paris", 43151678)
  • Autre forme INSERT INTO Client (liste des
    champs) VALUES (valeurs dans lordre des champs
    données)
  • Exemple
  • INSERT INTO Client (NumCl, NomCl, AdresseCl,
    CodePost, Ville, Tél) VALUES (1,"Delacroix", "45,
    rue Royal", 75008, "Paris", 43151678)

15
Manipulation de la BD (1)
  • Effacer une table de la base
  • Forme général DROP TABLE nomtable
  • Exemple DROP TABLE Client
  • Modifier une table
  • Première forme, ajouter un attribut ALTER
    TABLE Client ADD Remarque CHAR(80)
  • Seconde forme, modifier le type dun attribut
    ALTER TABLE Client MODIFY Ville CHAR(30)
  • Remarques
  • on peut faire plusieurs modifications à la fois.
  • on ne peut modifier une table que pour
    laugmenter !

16
Manipulation de la BD (2)
  • Mettre à jour une table. On utilise la clé pour
    choisir la bonne ligne de la table. Exemple
  • UPDATE Client SET adresse"74 Avenue De Gaulle",
    ville"Grenoble", CodePost"38500", Tél76581011
    WHERE NumCl1
  • UPDATE Article SET PrixPrix0.3
  • Effacer toutes les données dune table. Exemple
  • Suppression physique (plus sur les disques)
  • DELETE FROM Client
  • DELETE FROM Client WHERE ville"Paris" 
  • Suppression logique (permet de garder lespace
    alloué pour le profit de la même table)
  • TRUNCATE TABLE Article REUSE STORAGE

17
Requêtes de données
18
Les requêtes SQL
  • Maintenant que nous avons définit les tables et
    entrées les données, il est naturel de vouloir
    extraire certaines de ses données
  • Pour cela nous allons voir comment écrire des
    requêtes SQL
  • Cela va nous permettre de
  • lire complètement une table
  • lire une partie dune table
  • faire des jointures de différentes tables
  • tables complètes
  • ou quavec des sous-parties
  • faire des sous-requêtes pour créer des tables
    temporaires et en faire des jointures
  • etc.

19
Les requêtes simples
  • Afficher toutes les données de la table Client
  • SELECT FROM Client
  • De Paris SELECT FROM Client WHERE
    Ville"Paris"
  • SELECT "Client Parisiens" FROM Client WHERE
    Ville "Paris"
  • Lister que les noms et adresses des clients
  • SELECT NomCl, AdrCl FROM Client
  • De Paris ou Rouen SELECT NomCl, AdrCl FROM
    Client WHERE (Ville"Paris") OR (Ville"Rouen")
  • Lister tout les articles dont le prix unitaire
    est gt 150 et dont la quantité est lt 100
  • SELECT FROM Article WHERE (Prix gt 150) AND
    (Qtélt100)
  • Lister toutes les commandes enregistrés après le
    2 janvier 1995
  • SELECT FROM Commande WHERE DateEnrgt02-01-1995

20
Quelques prédicats (1)
  • Le prédicat BETWEEN AND, exemples
  • Lister tout les articles dont les prix sont
    compris entre 150 et 200 euros SELECT FROM
    Article WHERE Prix BETWEEN 150 AND 200
  • Lister tout les consommables non enregistrés
    entre les dates du 1 janvier 1995 et du 31 mars
    1996 SELECT FROM Consommable WHERE DateCom
    NOT BETWEEN 01-01-1995 AND 31-03-1996
  • Remarque On peut écrire une autre requête du
    premier problème mais celle-ci sera beaucoup
    moins efficace car elle chargera plusieurs fois
    la table en mémoire (SELECT FROM Article
    WHERE Prixgt150) INTERSECT (SELECT FROM Article
    WHERE Prixlt200)
  • Le prédicat IN, exemples
  • Lister tout les clients des villes de Paris,
    Rouen, Créteil SELECT FROM Client WHERE Ville
    IN (Paris, Rouen, Créteil)
  • Lister tout les articles dont le prix unitaire
    est 5, 11, 17, 23, 31, 37 SELECT FROM ARTICLE
    WHERE Prix IN (5, 11, 17, 23, 31, 37)

21
Quelques prédicats (2)
  • Le prédicat LIKE
  • Lister tout les clients dont le nom se termine
    par "nd" SELECT FROM Client WHERE NomCl LIKE
    nd
  • Lister tout les article dont la désignation est
    de 7 caractères, commence par N et se termine
    par d SELECT FROM Article WHERE Designation
    LIKE N-----d
  • Le prédicat NULL
  • Lister tout les articles dont la désignation na
    pas été saisie (est nulle) SELECT FROM
    Article WHERE Designation IS NULL

22
Retour sur la jointure (1)
  • Produit cartésien
  • concaténation de toutes les lignes de la
    première table avec toutes les lignes de la
    seconde table.
  • Exemple
  • Jointure
  • lien entre 2 tables disposant dau moins une
    colonne commune (sémantiquement). On associe a
    chaque ligne de la première table toutes les
    lignes de la seconde table
  • Exemple

Table 1 Table 2 Produit
a x a,x
b y a,y
c b,x
b,y
c,x
c,y
Table 1 Table 2 Jointure
a1,b1 b1,c1 a1,b1,c1
a2,b1 b2,c2 a2,b1,c1
a3,b2 b3,c3 a3,b2,c2
23
Retour sur la jointure (2)
  • Une jointure est un lien entre 2 tables
    disposant dune ou plusieurs colonnes commune
    sémantiquement
  • Lopération de jointure consistera à créer une
    table temporaire composé des lignes satisfaisant
    la condition de jointure
  • Par exemple, pour connaître les clients qui ont
    passé au moins une commande, on est amené à
    utiliser le lien entre les tables Client et
    Commandes puis den extraire seulement les lignes
    satisfaisant la condition suivante
  • Client.NumCl Commande.NumCl

24
Exemples jointure
  • Equi-jointure
  • Lister tout les clients Parisien qui ont passé
    une commande entre les dates du premier janvier
    1993 et aujourdhui
  • SELECT Client.NumCl, NomCl, AdrCl, Commande.Date
    FROM Client, Commande WHERE Client.NumClCommande.
    NumCl AND Client.Ville"Paris" AND Date BETWEEN
    01-01-1993 AND SYSDATE
  • Jointure multiple (equi et theta)
  • Lister tous les articles qui nont pas été
    commandé entre le premier janvier 1993 et
    aujourdhui
  • SELECT Article.NumArticle, Designation FROM
    Article, LigneComm, Commande WHERE
    Commande.NumComLigneComm.NumCom AND
    Article.NumArticleltgtLigneComm.NumArticle AND
    Commande.Date BETWEEN 01-01-1993 AND SYSDATE
  • On peut faire plus simple et éviter décrire
    toujours le nom de la table
  • SELECT A.NumArticle, Designation FROM Article A,
    LigneComm LC, Commande C WHERE C.NumComLC.NumCom
    AND A.NumArticleltgtLC.NumArticle AND C.Date
    BETWEEN 01-01-1993 AND SYSDATE

25
Jointure externe (1)
  • Dans les différents types de jointure présentés
    ci-dessus, toutes les lignes de la première table
    qui nont pas de lignes dans la seconde table et
    qui vérifient la condition de jointure, ne font
    pas partie du résultat final.
  • Si on souhaite faire apparaître cette ligne dans
    le résultat, on utilise la jointure externe
  • Une jointure externe est une jointure qui
    favorise une table par rapport à une autre.
    Aussi, les lignes de la table dominante seront
    affiché même si la condition nest pas réalisée.
    Une jointure externe est explicité par
    lopérateur () qui est placé dans la clause
    WHERE daprès le nom de la table et celui de la
    colonne subordonné. Comme suit
  • WHERE table1.colonne table2.colonne ()
  • WHERE table1.colonne () table2.colonne

26
Jointure externe (2)
  • Exemple Lister tous les clients parisiens qui
    ont passé ou non une ou plusieurs commande entre
    la période du 1er janvier et aujourdhui
  • SELECT X.NumClient, Nom, Prénom, adresse,
    DateComm, NumComm FROM Client X, Commande Y WHERE
    X.NumClientY.NumClient () AND Ville"Paris" AND
    Date BETWEEN 01-Jan-93" AND SYS_DATE

27
Condition de sous-requête (1)
  • SQL permet de comparer une expression ou une
    colonne ou résultat dune autre requête SELECT.
    Cette condition est dite condition de
    sous-requête  et les 2 requêtes sont dites
     requête imbriqués
  • Bien-sur, une sous-requête peut faire appel à
    une autre sous-requête etc.
  • Les requêtes imbriqués dans SQL peuvent être
    utilisés pour comparer une expression ou une
    liste dexpression au résultat dune autre
    requête SELECT, déterminer lappartenance dune
    expression ou lexistence dune ligne dans le
    résultat dune requête SELECT etc.

28
Condition sous-requête (2)
  • Une condition de sous-requête peut être formulé
    selon lune des possibilité suivante
  • WHERE Exp Opérateur_de_comparaison ALL ANY
    SOME (Requête_SELECT)
  • WHERE Exp NOT IN (Requête_SELECT)
  • WHERE NOT EXISTS (Requête_SELECT)
  • Lévaluation des sous-requêtes peut renvoyer
    plusieurs valeurs qui sont interprété comme suit
  • ALL la condition est vrai, si la comparaison
    est vrai pour chacune des valeurs retournées
    (remarque si lexpression de condition est de
    type numérique et si lopérateur de comparaison
    est gt alors la sous-requête sera équivalente à
    lextraction de la valeur maximale car si la
    condition est vrai pour le maximum, elle est
    aussi vrai pour toutes les autres)

29
Condition sous-requête (3)
  • ANY la condition est vrai si la comparaison
    est vrai pour au moins une des valeurs retournée
    (remarque si . lt alors .. minimal car .
    minimum , elle )
  • SOME ANY
  • IN la condition est vrai si la comparaison est
    vrai pour une des valeurs retournées par la
    sous-requête
  • EXISTS il est un peu différent des autres
    opérateurs, il renvoie un booléen (vrai ou faux)
    selon le résultat de la sous-requête. Si
    lévaluation de la sous-requête donne lieu a une
    ou plusieurs ligne, la valeur retourné est vrai.
    Cette valeur sera fausse dans le cas contraire.

30
Exemples de sous-requêtes (1)
  • Lister tous les articles dont la quantité en
    stock est gt à toutes quantité commandé du même
    article
  • SELECT IdArticle, Designation, QtéStock from
    Article X WHERE QtéStock gt ALL (SELECT QtéComm
    FROM ligne_commande Y WHERE X.IdArticleY.IdArticl
    e)
  • SELECT IdArticle, Designation, QtéStock FROM
    Article X WHERE QtéStock gt (SELECT
    MAX(QtéCommandé) FROM ligne_commande Y WHERE
    X.IdArticleY.IdArticle
  • Lister tous les articles dont la quantité est gt
    a au moins une quantité commandé au même article
  • gt ANY (SELECT QtéCommandé )
  • ou SELECT Min(QtéCommandé)

31
Exemples de sous-requêtes (2)
  • Lister tous les clients parisien qui ont passé
    une commande entre le 1er janvier 93 et
    aujourdhui et dont la quantité commandé est
    égale à la quantité en stock
  • SELECT DISTINCT IdClient FROM Commande WHERE
    IdClient IN (SELECT IdClient FROM Client WHERE
    ville"Paris") AND DateComm BETWEEN "01-Jan-93 
    AND SYSDATE)
  • Mémo technique
  • (lt ou ) 1 seul valeur
  • (IN, ALL, ANY) une liste de valeur
  • EXISTS, un ensemble de valeur

32
Requêtes plus complexes
33
Les fonctions dagrégat (1)
  • Ces fonctions sont appliqués sur des groupes de
    données Ainsi, on peut déterminer le nombre de
    ligne par table ou par groupe de données,
    calculer la somme ou la moyenne ou déterminer le
    maximum ou le minimum dune colonne etc.
  • Les fonction dagrégat offert par SQL sont les
    suivantes
  • COUNT() nombre de ligne satisfaisant la
    requête
  • SELECT COUNT() FROM Clients
  • SELECT COUNT(NumClient) FROM Clients
  • COUNT(DISTINCT Colonne) permet déviter les
    doublon
  • Calculer le nombre de clients qui ont passé des
    commandes entre le 01-10-1999 et aujourdhui
  • SELECT COUNT(DISTINCT NumClient) FROM Commandes
    WHERE Date BETWEEN 01-10-1999 AND SYS_DATE
  • SUM(DISTINCT Colonne) permet de faire la somme
    des valeurs de la colonne donnée et satisfaisant
    la requête. Loption DISTINCT somme les valeurs
    uniques

34
Les fonctions dagrégat (2)
  • Suite des fonctions dagrégat possible
  • AVG(DISTINCT Colonne) permet de calculer la
    moyenne ( AVeraGe  en Anglais) des données
    satisfaisant la requête.
  • MAX(DISTINCT Colonne) pour le maximal et
    MIN(DISTINCT Colonne) pour le minimal
  • STDDE(DISTINCT Colonne) pour lécart type et
    VARIANCE(DISTINCT Colonne) pour la variance
  • En présence de valeurs NULL dans les données, la
    fonction COUNT prend en compte ces lignes. Les
    autres fonctions ignorent les NULL
  • Important Les fonctions dagrégat ne peuvent
    en aucun cas être ailleurs que suite au SELECT
    (pas dans la clause WHERE par exemple)

35
Les fonctions dagrégat (3)
  • Exemples
  • Lister le nombre darticles, les prix unitaires,
    maximum, minimum et moyen des différents articles
  • SELECT COUNT() MAX(PrixUnitaire)
    MIN(PrixUnitaire) AVG(PrixUnitaire) FROM Article
  • Calculer le montant total du stock darticle
  • SELECT SUM(PrixUnitaireQteEnStock) FROM Article

36
Groupement de données (1)
  • Avec les fonctions dagrégats SQL permet de
    grouper des lignes de données ayant des valeurs
    communes ainsi, on peut formuler par exemple,
    une requête qui liste le nombre de clients par
    ville
  • Cette possibilité est explicité par la clause
    GROUP BY
  • Exemple Lister le nombre de lignes par
    commande
  • Imaginons une table "Client", faire un COUNT()
    sur cette table reviendrai à compter le nombre de
    ligne de cette table (le nombre de clients)
  • Par contre, COUNT() sur les groupes de la table
    LigneComm donnerai le nombre de ligne par commande

37
Groupement de données (2)
  • NumClient
  • SELECT NumClient, Count() FROM LigneComm GROUP
    BY NumClient

NumCl
1
2
3
3
4
1
2
5
3
2
4
1
1
2
2
2
3
3
3
4
4
5
38
Groupement de données (3)
  • Autre exemple
  • Lister le montant de chaque commande
  • SELECT NumCom, SUM(PrixUnitQtéCommandé) FROM
    Article Y, LigneComm X WHERE X.NumArticleY.NumArt
    icle GROUP BY NumCom

39
Trier les données
  • Lister tous les clients par ordre de ville et de
    nom de clients
  • SELECT FROM Client ORDER BY Ville, Nom
  • ORDER BY Colonne Position
  • avec PositionASC pour ordre ascendant et DESC
    pour ordre décroissant
  • SELECT FROM Client ORDER BY Ville DESC, Nom
    ASC
  • Lister toutes les commandes par ordre
    décroissant des numéros de commande et de ligne
  • SELECT Num_Comm, Num_Ligne FROM Ligne_Comm ORDER
    BY 1 DESC, 2 DESC
  • Remarque il nest pas très utile (pas
    optimisé) dutiliser ORDER BY dans une
    sous-requête vue que lon veut juste y prendre un
    ensemble de données

40
Fusion de requêtes
  • Il est possible d"unifier" des requêtes avec
    des opérations ensemblistes
  • UNION
  • INTERSECT
  • Exemple stupide
  • Donnez la liste des clients vivant soit à Paris
    soit à Créteil
  • (SELECT FROM Client WHERE Client.Ville"Paris")
    UNION (SELECT FROM Client WHERE
    Client.Ville"Créteil")
  • SELECT FROM Client X WHERE X.Ville"Paris" OR
    X.Ville"Créteil"

41
La clause HAVING (1)
  • Supposons que lutilisateur désire lister les
    commandes dont le nombre de ligne est gt 5. Il se
    doit donc utiliser la condition COUNT
    (Num_Ligne)gt5 avec un regroupement sur la
    commande Num_Comm. Nous aurions la requête
    suivante
  • SELECT Num_Comm, COUNT() FROM Ligne_Comm WHERE
    COUNT(Num_Ligne)gt5 GROUP BY Num_Comm
  • Pourtant, cette requête ne peut donné le
    résultat escompté car elle contient une erreur de
    syntaxe on rappel que la condition de la clause
    WHERE ne peut en aucun cas inclure des fonctions
    dagrégats
  • La clause HAVING offert par SQL permet une
    restriction sur un groupe de ligne. Elle est liée
    à la clause GROUP BY

42
La clause HAVING (2)
  • HAVING Condition la condition peut être une ou
    plusieurs conditions liées avec les opérations
    logique AND et/ou OR. Une condition sert à
    comparer une fonction dagrégat du groupe à une
    autre fonction dagrégat ou une constante.
  • Exemples
  • Requête précédente
  • SELECT Num_Com, COUNT() FROM Ligne_Comm GROUP
    BY Num_Comm HAVING COUNT(Num_Ligne)gt5
  • Lister la somme de toutes les commandes dont le
    nombre de ligne est gt 4
  • SELECT NumCom, SUM(PrixUnitéQté_Comm) FROM
    LigneComm X, Article Y WHERE X.NumArticleY.NumArt
    icle GROUP BY NumComm HAVING COUNT(Num_Ligne)gt4

43
La clause HAVING (3)
  • La clause HAVING est une condition de
    regroupement
  • Exemple
  • SELECT NumCom, SUM(PrixUnitéQté_Comm) FROM
    LigneComm X, Article Y WHERE X.NumArticleY.NumArt
    icle GROUP BY NumComm HAVING SUM(PrixUnitéQté_Com
    m)gt5
  • Voici donc lordre décriture dans une requête
  • SELECT
  • WHERE
  • GROUP
    BY

  • HAVING

44
Exemples examen (1)
  • Nous utiliserons la base de donnée suivante
  • Magazin(Num_Mag, Adr, Gu)
  • Article(Num_Art, Nom, Poids, Couleur,
    Prix_Achat, Prix_Vente, Num_Fournisseur)
  • Clients(Num_Client, NomCl, Prénom, Pays, AdrCl)
  • Ventes(Num_Client, Num_Mag, Num_Art, Date,
    Quantité, PrixRéel)
  • Donnée en SQL les requêtes suivantes

45
Exemples examen (2)
  • Calculer par article, la remise total accordé
    par rapport aux prix de vente catalogué pour une
    semaine.
  • On va construire au fur et à mesure la requête
    (pas à lexamen)
  • SELECT Nom FROM Ventes, Articles WHERE
    Ventes.Num_ArtArticles.Num_Art AND Date BETWEEN
    01-10-1999 AND SYS_DATE
  • SELECT Nom, SUM(Qté(Prix_Vente-PrixRéel) FROM
    Ventes, Articles WHERE Date BETWEEN 01-10-1999
    AND SYS_DATE AND Ventes.Num_ArtArticles.Num_Art
    GROUP BY Num_Art
  • Rechercher la couleur des articles dont le prix
    de vente moyen des articles de la couleur est gt
    100
  • SELECT Couleur, AVG(Prix_Vente) FROM Articles
    GROUP BY Couleur HAVING AVG(Prix_Vente)gt100

46
Optimisation de requêtes
  • Lorsque lon écrit une requête, il faut penser
    au conséquences calculatoires (en terme de calcul
    et de ressources mémoires)
  • En effet, chaque sous-requêtes, chaque jointure,
    chaque ORDER BY, chaque GROUP BY, chaque HAVING a
    pour conséquence de créer une table temporaire
    si le nombre de données est très important, cela
    prend nécessairement du temps (le SGBD nest pas
    magique)
  • Il faut donc que vous pensiez au coût de vos
    requêtes entre 2 requêtes, pour un même
    résultats, laquelle des 2 créera le moins de
    tables temporaires
  • Exemple regardons nos précédentes requêtes
  • En cas de doute, demander à un gentil
    informaticien -)

47
À la semaine prochaine !
Write a Comment
User Comments (0)
About PowerShow.com