La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 © C. HANACHI, J.M. THEVENIN DESS DSI Cours d informatique 3ème Partie : Interroger une Base de Données Cours de Mr Thévenin Polycopié

Présentations similaires


Présentation au sujet: "1 © C. HANACHI, J.M. THEVENIN DESS DSI Cours d informatique 3ème Partie : Interroger une Base de Données Cours de Mr Thévenin Polycopié"— Transcription de la présentation:

1 1 © C. HANACHI, J.M. THEVENIN DESS DSI Cours d informatique 3ème Partie : Interroger une Base de Données Cours de Mr Thévenin Polycopié réalisé par C. HANACHI, J.M. THEVENIN Introduction aux Bases de Données

2 2 © C. HANACHI, J.M. THEVENIN

3 3 3ème Partie : Interroger une Base de DonnéesRelationnelle 4. Lalgèbre relationnelle 5. Le langage SQL

4 4 © C. HANACHI, J.M. THEVENIN Chapitre 4 Lalgèbre relationnelle 1.Les différents types de langages 2.Bases théoriques 3.Opérations utilisées 4.Projection 5.Restriction 6.Jointure 7.Démarche dinterrogation 8.Exemples 9.Union 10.Différence 11. Intersection 12. Démarche de simplification

5 5 © C. HANACHI, J.M. THEVENIN 4.1 Les différents types de langages Langage Graphique RS a b c Afficher x x x Critères =Cte SELECT a,b,c FROM R,S WHERE R S and =Cte Langage SQL Langage Algébrique RS = Cte a, b, c Res SGBD BD a b c

6 6 © C. HANACHI, J.M. THEVENIN Les différents types de langages SQL : Langage puissant et complet Interface standard des SGBD Langages graphiques Plus faciles daccès Permettent dexprimer des requêtes SQL simples Un langage graphique est spécifique à un SGBD (certains SGBD nen ont pas) Attention ! Si mal maitrisé -> risque de répondre « à côté » Langage Algébrique Comprendre la sémantique des requêtes Langage intermédiaire de travail

7 7 © C. HANACHI, J.M. THEVENIN 4.2 Bases théoriques Théorie des ensembles OP1 OP3 OP2 Relation R r1 r2 r3 Table T1 r1 r2 r3 Table T2 r1 r2 r3 s1 s2 Relation S s1 s2 Table Résultat r3 s2

8 8 © C. HANACHI, J.M. THEVENIN 4.3 Opérateurs utilisés Opérateurs relationnels Projection Restriction Jointure Opérateurs ensemblistes Union Intersection Différence Fonction statistiques Somme Min Max Moyenne ComptageDeLignes (NbVal)

9 9 © C. HANACHI, J.M. THEVENIN 4.4 Projection Opération permettant déliminer les colonnes qui ne nous intéressent pas dans une table Ex : Afficher les noms de pays source dun fleuve Relation R a b c b b RabcRabc Attribut b Afficher x SELECT b FROM R Langage algébriqueLangage graphiqueLangage SQL

10 10 © C. HANACHI, J.M. THEVENIN 4.5 Restriction Opération permettant déliminer les lignes qui ne nous intéressent pas dans une table Ex : Liste des pays dont la superficie est supérieure à Km 2 Relation R a b c b=10 RabcRabc Attribut b Afficher Critère =10 WHERE b=10 Langage algébriqueLangage graphiqueLangage SQL a b c 10

11 11 © C. HANACHI, J.M. THEVENIN 4.5 Jointure Opération permettant de relier des lignes provenant de deux tables différentes selon un critère pour fabriquer une nouvelle table Ex : Nom et superficie des pays dans lesquels les fleuves prennent leur source RabcRabc WHERE R.c=S.c Langage algébriqueLangage graphiqueLangage SQL Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 Relation S c d 1 cochon 2 loup 3 canard 4 poule Relation R a b c Relation S c d 3 canard 1 cochon riri 3 fifi 3 loulou 3 nafnaf 1 R.c=S.c ScdScd

12 12 © C. HANACHI, J.M. THEVENIN Jointure naturelle Cas particulier jointure entre deux tables avec un prédicat dégalité entre une clé étrangère et la clé référencée -> Premet de parcourir les arcs reliant des Entités représentés sur un schéma E/A Exemple : Fleuves.NomPSource=Pays.NomP

13 13 © C. HANACHI, J.M. THEVENIN 4.7 Démarche Soit une question Q que lon souhaite poser au SGBD a) identifier sur le schéma E/A les propriétés que lon doit afficher et celle dont on a besoin pour les restrictions exprimées dans Q b) choisir sur le schéma E/A les associations par lesquelles on va passer pour relier les entités impliquées en a), en fonction de la sémantique de Q c) repérer dans le schéma relationnel les attributs et les tables correspondant à ce qui a été repéré en a) et b) d) effectuer pour chaque table les restriction nécessaires e) relier les tables 2 à 2 avec les jointures adéquates f) appliquer à la dernière table obtenue une projection sur les attributs que l on souhaite afficher

14 14 © C. HANACHI, J.M. THEVENIN 4.8 Exemples Schéma relationnel : Pays (NomP, Superficie, NbHabitants) EspacesMaritimes (NomEM, Type) Fleuves (NomF, Longueur, NomPSource*, NomEMJette*) Traverser (NomP*, NomF*, Distance) Cotoyer (NomP*, NomEM*) Frontières (NompA*, NompZ*) Schéma E/A

15 15 © C. HANACHI, J.M. THEVENIN Exemples Q1 Nom et superficie du pays où le Danube prend sa source Q2 Liste des pays traversés par le Danube. Donner leur nom, leur superficie et la distance parcourue

16 16 © C. HANACHI, J.M. THEVENIN Exemples Q3 Liste des fleuves de plus de 500 Km se jetant dans une mer Q4 Liste des pays qui côtoient lespace maritime dans le quel se jette le Rhône

17 17 © C. HANACHI, J.M. THEVENIN Exemples Q5 Liste des pays qui côtoient les espaces maritimes dans lesquels se jette un fleuve prenant sa source en France

18 18 © C. HANACHI, J.M. THEVENIN 4.9 Union Opération permettant dajouter des lignes à une table Ex : Insérer les animaux nifnif et titi Insert Into R Values (nifnif,,1) Values (titi,,5); Langage algébriqueLangage graphiqueLangage SQL Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 Relation Temp a b c nifnif 1 titi 5 U a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 Pas possible Relation R

19 19 © C. HANACHI, J.M. THEVENIN Union Faire des union de questions Utile pour répondre à des questions comportant un OU entre des prédicats portant sur des relations différentes Ex : liste des pays côtoyant une mer OU un fleuve Select a1,a2 From R, S Where P1 and R S UNION Select a1,a2 From T, U Where P2 and T U Langage algébriqueLangage graphiqueLangage SQL Pas possible U Résultat satisfaitant Q1 OU Q2 R S P1 a1,a2 T U P2 a1,a2 Q1 Q2 Q1 Q2

20 20 © C. HANACHI, J.M. THEVENIN 4.10 Différence Opération permettant de supprimer des lignes à une table Ex : Supprimer les animaux nifnif et titi Delete From R Where a=nifnif Or a=titi; Langage algébriqueLangage graphiqueLangage SQL Pas possible Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 a b c nifnif 1 titi 5 _ a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 Relation R Relation Temp

21 21 © C. HANACHI, J.M. THEVENIN Différence Opération permettant de trouver les lignes présentes dans une table et pas dans lautre Utile pour tester labsence de lien entre les lignes de deux tables Toutes les questions avec …NE … PAS... Ex : liste des pays NE côtoyant PAS de mer PB : -La jointure permet de trouver les lignes dune table reliées aux lignes dune autre table -Elle ne permet pas de retrouver les lignes qui ne sont pas reliées -ex : Select nomP from Côtoyer, EspaceSMaritimes EM Where type = mer and Côtoyer.nomEM<> EM.nomEM retrouve tous les pays côtoyant un océan, dont la France. Pourtant la France côtoie une mer.

22 22 © C. HANACHI, J.M. THEVENIN Différence Faire des différences de questions Utile pour répondre à des Questions comportant : NE … PAS Ex : liste des pays NE côtoyant PAS de mer Select NomP From P MINUS Select NomP From C, EM Where type=mer and C EM Langage algébriqueLangage graphiqueLangage SQL Pas possible _ Résultat satisfaitant NE … PAS P NomP C EM Type=mer NomP Q1 Q2 Q1 Q2

23 23 © C. HANACHI, J.M. THEVENIN 4.11 Intersection Opération permettant de trouver les lignes présentes dans deux tables de même schéma Utile pour les questions comportant un ET entre deux prédicats dégalité portant sur le même attribut Ex: liste des pays côtoyant une mer ET un océan PB : EM Type = mer et Type = océan

24 24 © C. HANACHI, J.M. THEVENIN Intersection Faire des intersections de questions Ex : liste des pays côtoyant une mer ET un océan Select a1,a2 From R, S Where P1 and R S INTERSECT Select a1,a2 From R, S Where P2 and R S Langage algébriqueLangage graphiqueLangage SQL Pas possible U Résultat satisfaitant P1 et P2 R S P1 a1,a2 R S P2 a1,a2 Q1Q2 Q1 Q2

25 25 © C. HANACHI, J.M. THEVENIN 4.12 Démarche de simplification Penser à décomposer les questions compliquées en une succession de questions simples reliées par -UNION -INTERSECT -MINUS Exemple : Liste des pays ne côtoyant ni espace maritime, ni fleuve => liste des pays MINUS (liste des pays côtoyant un espace maritime UNION liste des pays côtoyant un fleuve )

26 26 © C. HANACHI, J.M. THEVENIN Chapitre 5 Le langage de requêtes SQL 1.Introduction 2.Langage déclaratif 3.Syntaxe générale dune requête SQL 4.Syntaxe détaillée 4.1. Expression de la projection 4.2. Expression des restrictions 4.3. Expression des jointures 4.4. Expression des unions, intersections, différences 5.Travail sur le résultat dune requête SQL 5.1. Tri du résultat 5.2. Effectuer un calcul sur le résultat 5.3. Effectuer des sous-totaux 5.4. Restrictions sur les sous-totaux 6.Exemple Complet de requête

27 27 © C. HANACHI, J.M. THEVENIN 5.1 Introduction Caractéristiques : SQL : version commerciale de SEQUEL(IBM,1974) Langage d'interrogation de BD relationnelles Normalisé depuis fin 86 (standard) -version complète dans les gros systèmes (INGRES, ORACLE, DB2, INFORMIX,...) -version + ou - complète dans les SGBD Micro (ACCESS, PARADOX, FOXPRO, 4D, …) Il est accessible en conversationnel, ou depuis un langage de programmation ; Manipule les notions de base de données, de relation (table), de vue, d'index.

28 28 © C. HANACHI, J.M. THEVENIN Introduction 4 types de fonctions : La description de données : permet de définir, de supprimer une base de données ou une relation (verbes CREATE, DROP) Le contrôle de laccès aux données (verbes GRANT, REVOKE) La manipulation des données : suppression, modification, insertion dans une relation (verbes DELETE, UPDATE, INSERT) Linterrogation d'une base de données (verbe SELECT) Ce chapitre est centré sur linterrogation

29 29 © C. HANACHI, J.M. THEVENIN 5.2 Langage déclaratif SQL est un langage déclaratif : L'utilisateur définit le résultat à obtenir à laide de prédicats (QUOI), le système optimise la procédure de recherche (COMMENT) Par opposition à lalgèbre relationnelle qui introduit un ordre dans lenchaînement des opérations Par opposition aux langages impératifs : Basic, Pascal, C, Java...

30 30 © C. HANACHI, J.M. THEVENIN Langage déclaratif Efficacité dune requête : Solution 1Solution 2 Résultat PT NomP, Superficie F NomF= Rhône P.Nomp=T.NomP T.Nomf=F.Nomf Résultat PT NomP, Superficie F NomF=Rhône P.Nomp=T.NomP T.Nomf=F.Nomf P = Pays T = Traverser F = Fleuves

31 31 © C. HANACHI, J.M. THEVENIN Langage déclaratif Optimisation : Résultat P T NomP, Superficie F NomF=Rhône P.NomP=T.NomP T.NomF=F.NomF NomF Opération 1 Opération 2 Opération 3

32 32 © C. HANACHI, J.M. THEVENIN 5.3 Syntaxe générale dune requête SQL SELECT FROM WHERE ; La formule de sélection peut contenir : Les opérateurs de comparaison : >, =, Les opérateurs logiques : AND, OR, NOT Les prédicats : ALL, ANY, EXISTS, BETWEEN, LIKE, IN ( à combiner éventuellement avec NOT) Des sous-requêtes

33 33 © C. HANACHI, J.M. THEVENIN Syntaxe générale dune requête SQL Correspondance entre le SQL et le langage algébrique Lordre des prédicats dans la clause WHERE na pas dimportance (lordre des opérations sera optimisé) Sémantique 1 On fait le produit cartésien de toutes les tables de la clause FROM 2 On applique à ce résultat tous les prédicats de la clause WHERE 3 On affiche les colonnes de la clause SELECT R S P1 a1,a2 SELECT a1,a2 FROM R, S WHERE P1 and R S R S

34 34 © C. HANACHI, J.M. THEVENIN 5.4 Syntaxe détaillée Base dexemple FILM(CodeFilm, Titre, Année, Durée, Réalisateur, Genre) ACTEUR(Nom, Prénom, DateNaissance, Sexe, Nationalité) JOUE(CodeFilm*, NomActeur*) -La durée est exprimée en minutes.

35 35 © C. HANACHI, J.M. THEVENIN Expression de la projection NomRelation.NomAttribut : permet de désigner un attribut Ex : afficher les noms des Réalisateurs SELECT Film. Réalisateur FROM Film ; NomAttribut : permet de désigner un attribut sil n y a pas dambiguité sur sa provenance SELECT Réalisateur FROM Film ; DISTINCT : permet déliminer les lignes en double dans le résultat Ex : chaque Réalisateurs nest affiché quune fois SELECT DISTINCT Réalisateur FROM Film ;

36 36 © C. HANACHI, J.M. THEVENIN Expression de la projection * : permet de désigner tous les attributs dune table Ex : afficher la table Film SELECT Film.* FROM Film ; ou SELECT * FROM Film ; Expression dun calcul : permet de spécifier un calcul appliqué à une colonne Ex : afficher les titres Film et les deux derniers chiffre de leur année de parution SELECT Titre, Année MOD 100 FROM Film ; Remarque : ce calcul utilise la fonction modulo appliquée à lannée et une valeur constante (100)

37 37 © C. HANACHI, J.M. THEVENIN Expression de la projection AS : permet de spécifier lentête dune colonne affichée dans le résultat Ex : afficher pour chaque pays le ratio superficie/nombre dhabitants SELECT NomP AS Pays, Superficie/NbHab AS Occupation FROM Pays ; Remarque : ce calcul utilise deux valeurs provenant de colonnes différentes mais figurant sur la même ligne Projection dune constante : permet de spécifier la valeur affichée dans une colonne Ex : existe-t-il des films de plus de 300 minutes SELECT DISTINCT il existe des films de plus de 300 minutes FROM Film WHERE Duree > 300 ;

38 38 © C. HANACHI, J.M. THEVENIN Expression des restrictions Notion de Prédicat : Expression logique à laquelle on peut répondre par VRAI ou par FAUX pour chaque ligne de la table opérande Une restriction ne garde que les lignes pour lesquelles on a répondu VRAI Prédicat simple : NomRelation.NomAttribut Valeur ou NomAttribut Valeur est un comparateur : =,, >=, <> Ex : titre des films de l'année 1998 ? SELECTtitre FROM film WHEREannée = 1998 ;

39 39 © C. HANACHI, J.M. THEVENIN Expression des restrictions Prédicat composé : Combinaison de prédicats reliés par les connecteur AND (ET), OR (OU) Lutilisation de parenthèses peut être utile pour préciser comment combiner des prédicats reliés par des AND et des OR Ex : titre des films policiers de l'année 1960 et de l'année 1968 ? SELECT Titre FROM Film WHERE (Année=1960 OR Année=1968) AND Genre = policier;

40 40 © C. HANACHI, J.M. THEVENIN Expression des restrictions NOT : inverse le résultat dun prédicat Ex : titre des films produits entre 1980 et 1983 ? SELECT Titre FROM Film WHERE Année>=1980 AND Année<=1983 ; peut aussi sécrire : SELECT Titre FROM Film WHERE NOT (Année 1983 ) ; BETWEEN : pour spécifier un prédicat comportant un interval Ex : titre des films produits entre 1980 et 1983 ? SELECT Titre FROM Film WHERE Année BETWEEN 1980 AND 1983 ;

41 41 © C. HANACHI, J.M. THEVENIN Expression des restrictions IN : teste si la valeur dune colonne est incluse dans un ensemble Ex : titre des films produits entre 1980 et 1983 ? SELECT Titre FROM Film WHERE Année IN (1980, 1981, 1982, 1983) ; Ex : Titre des films réalisés par : PARKER, MALLE, ou VERNEUIL ? SELECT Titre FROM Film WHERE Réalisateur IN (PARKER, MALLE, VERNEUIL) ; Ex : Films qui nont pas été réalisés par : PARKER, MALLE, ou VERNEUIL ? SELECT Titre FROM Film WHERE Réalisateur NOT IN (PARKER, MALLE, VERNEUIL) ;

42 42 © C. HANACHI, J.M. THEVENIN Expression des restrictions LIKE : comparer la chaîne de caractère dune colonne à un Modèle Modèle : chaîne de caractère avec des jokers : _ (souligné) -> Tout caractère isolé % -> Zéro, un ou plusieurs caractères Ex : titre des films de Brian de Palma ? SELECT Titre FROM Film WHERE Réalisateur LIKE _ rian%de%alma ; UPPER, LOWER : transformer la chaîne de caractère dune colonne majuscules ou en minuscules Certains SGBD différencient A et a Ex : titre des films de Malle ? SELECT Titre FROM Film WHERE UPPER(Réalisateur) =MALLE

43 43 © C. HANACHI, J.M. THEVENIN Expression des jointures Notion de jointure : Utilisée pour rassembler des lignes provenant de tables différente reliée par un prédicat Sévalue comme une restriction sur le produit cartésien des deux tables Jointure classique en SQL : Exprimée par un prédicat dans la clause WHERE NomRel1.NomAtt1 NomRel2.NomAtt2 est un comparateur : =,, >=, <> Ex : Afficher les réalisateurs avec qui les acteurs ont joué ? SELECTNomActeur, Réalisateur FROM Film, Joue WHEREFilm. Codefilm = Joue. Codefilm;

44 44 © C. HANACHI, J.M. THEVENIN Expression des jointures FILM CodeFilmDuréeRéalisateurAnnée F12Fellini82 F2283 VerneuilF31h30Fellini80 JOUE CodeFilm*NomActeur* F2 Signoret F2Montant F3MastroianiF3Montant FILM X JOUE CodeFilmDuréeRéalisateurAnnéeCodeFilm*NomActeur* F12Fellini82F12Fellini82F12Fellini82F12Fellini82 F2 Signoret F2Montant F3MastroianiF3MontantVerneuil F2 Signoret F2Montant F3MastroianiF3MontantF31h30Fellini80F31h30Fellini80F31h30Fellini80F31h30Fellini80 F2 Signoret F2Montant F3MastroianiF3Montant F2283 F2283 F2283 F2283 Lignes qui seront éliminées par le prédicat de jointure Film. Codefilm = Joue. Codefilm Remarque : le film F1 ne fera pas parti du résultat de la jointure car il n a pas dacteurs

45 45 © C. HANACHI, J.M. THEVENIN Expression des jointures Semi-Jointure : Lorsque lon veut tester si une ligne dune première table est reliée à au moins une ligne dune seconde table, mais que lon naffiche pas les informations de la seconde table Plus rapide quune vraie jointure (car dès que lon a trouvé un lien, on peut tester la ligne suivante) Ex : Qui a joué avec Fellini ? SELECTNomActeur FROM Joue, Film WHEREJoue. Codefilm = Film. Codefilm AND Réalisateur = Fellini ;

46 46 © C. HANACHI, J.M. THEVENIN Expression des jointures IN : expression dune Semi-Jointure avec une sous-requête La semi-jointure est traitée comme une restriction sur la relation externe avec un prédicat IN Une sous-requête produit un ensemble de valeurs compatibles avec lattribut de jointure de la relation dite externe ( RelExt.AttJ IN (SELECT …) ) Cet ensemble de valeurs est extrait parmis les valeurs de lattribut de jointure de la relation dite interne ( (SELECT Attj FROM RelInt …) ) Ex : Qui a joué avec Fellini ? SELECTNomActeur FROM Joue WHERE Joue.Codefilm IN (SELECT Film.Codefilm FROM Film WHERE Réalisateur = Fellini ) ;

47 47 © C. HANACHI, J.M. THEVENIN Expression des jointures Ex (suite) SELECT Film.Codefilm FROM Film WHERE Réalisateur = Fellini SELECTJoue.NomActeur FROM Joue WHEREJoue.Codefilm IN (F1, F3 ); CodeFilm F1 F3

48 48 © C. HANACHI, J.M. THEVENIN Expression des jointures EXISTS : tester l'existence dun lien via une sous-requête La semi-jointure est traitée comme une restriction sur la relation externe avec un prédicat EXISTS Le prédicats EXISTS est VRAI si la sous-requête associée ramène au moins une ligne résultat. La sous-requête est exécutée pour chaque ligne de la relation dite externe. A chaque sous-requête lattribut de jointure de la relation externe est considéré comme une constante (restriction ) La sous-requête contient un prédicat de jointure entre la relation externe et la relation dite interne. Cette jointure est traitée comme une restriction. Ex : Qui a joué avec Fellini ? SELECTNomActeur FROM Joue WHERE EXISTS (SELECT * FROM Film WHERE Réalisateur = Fellini AND Film. Codefilm = Joue. Codefilm) ;

49 49 © C. HANACHI, J.M. THEVENIN Expression des unions, intersections, différences Composition de requêtes SQL : Opérateurs de composition (OC) -UNION -INTERSECT -MINUS Syntaxe des requêtes composées SELECT Colonnes-1 FROM … OC SELECT Colonnes-2 FROM … ; -Attention ! Les colonnes spécifiées dans Colonnes-1 et Colonnes-2 doivent être compatibles deux à deux

50 50 © C. HANACHI, J.M. THEVENIN Expression des unions, intersections, différences Ex : Liste des pays ne côtoyant ni espace maritime, ni fleuve SELECTNomP FROM Pays MINUS (SELECT NomP FROM Cotoyer UNION SELECT NomP FROM Traverser) ;

51 51 © C. HANACHI, J.M. THEVENIN Expression des unions UNION : questions avec OU Ex : Liste des pays côtoyant une mer OU un fleuve. Afficher leur nom et leur superficie. SELECT NomP, Superficie FROM Pays, Cotoyer WHERE Pays.NomP= Cotoyer.NomP UNION SELECT NomP, Superficie FROM Pays, Traverser WHERE Pays.NomP= Traverser.NomP ;

52 52 © C. HANACHI, J.M. THEVENIN Expression des intersections INTERSECT : questions avec ET Ex : Nom et prénom des acteurs qui ont joué dans des comédies et des policiers SELECT Nom, Prénom FROM Acteurs A, Joue J, Film F WHERE Genre = Comédie AND F.CodeFilm = J.CodeFilm AND J.NomActeur = A.Nom INTERSECT SELECT Nom, Prénom FROM Acteurs A, Joue J, Film F WHERE Genre = Policier AND F.CodeFilm = J.CodeFilm AND J.NomActeur = A.Nom ;

53 53 © C. HANACHI, J.M. THEVENIN Expression des intersections Jointure : lintersection peut aussi sexprimer à laide dune jointure Ex : Nom et prénom des acteurs qui ont joué dans des comédies et des policiers SELECT Nom, Prénom FROM Acteurs A, Joue J1, Film F1, Joue J2, Film F2 WHERE F1.Genre = Comédie AND F1.CodeFilm = J1.CodeFilm AND J1.NomActeur = A.Nom AND F2.Genre = Policier AND F2.CodeFilm = J2.CodeFilm AND J2.NomActeur = A.Nom ;

54 54 © C. HANACHI, J.M. THEVENIN Expression des différences MINUS : questions avec NE … PAS, Ex : Nom et prénom des acteurs qui nont pas joué dans des comédies SELECTNom, Prénom FROM Acteurs MINUS SELECT Nom, Prénom FROM Acteurs A, Joue J, Film F WHERE Genre = Comédie AND F.CodeFilm = J.CodeFilm AND J.NomActeur = A.Nom ; Principe : pour tester labsence de lien entre un acteur et une comédie, on sélectionne tous les acteurs sauf (moins) ceux qui sont reliés a un comédie (jointure)

55 55 © C. HANACHI, J.M. THEVENIN Expression des différences NOT IN : La différence peut aussi sexprimer à l aide du prédicat NOT IN La sous-requête est exécutée une seule fois. Le prédicats NOT IN est appliqué à toutes les lignes la relation externe avec lensemble de valeurs produit par la sous-requête. => résultat = relation externe - sous-requête Ex : Nom et prénom des acteurs qui nont pas joué dans des comédies SELECTNom, Prénom FROM Acteurs WHERE Nom NOT IN (SELECT Nom FROM Acteurs A, Joue J, Film F WHERE Genre = Comédie AND F.CodeFilm = J.CodeFilm AND J.NomActeur = A.Nom) ;

56 56 © C. HANACHI, J.M. THEVENIN Expression des différences Ex : Nom et prénom des acteurs qui nont pas joué dans des comédies (suite) Optimisation des jointures SELECTNom, Prénom FROM Acteurs WHERE Nom NOT IN (SELECT NomActeur FROM Joue J, Film F WHERE Genre = Comédie AND F.CodeFilm = J.CodeFilm) ; La table acteur n est pas indispensable

57 57 © C. HANACHI, J.M. THEVENIN Tester labsence de lien NOT EXISTS : tester labsence de lien via une sous-requête Le prédicats NOT EXISTS est VRAI si la sous- requête associée ne ramène aucune ligne résultat. La sous-requête est exécutée pour chaque ligne de la relation dite externe. A chaque sous-requête lattribut de jointure de la relation externe est considéré comme une constante (restriction ) La sous-requête contient un prédicat de jointure entre la relation externe et la relation dite interne. Cette jointure est traitée comme une restriction. Ex : Qui na jamais joué avec Fellini ? SELECTNomActeur FROM Joue WHERE NOT EXISTS (SELECT * FROM Film WHERE Réalisateur = Fellini AND Film. Codefilm = Joue. Codefilm) ; Ce genre de requête se traite souvant avec une différence (plus facile à exprimer)

58 58 © C. HANACHI, J.M. THEVENIN Tester labsence de lien NOT IN : tester labsence de lien via une sous-requête ATTENTION ! Ne pas confondre le mode demploi des prédicats IN et EXISTS Ex : Qui na jamais joué avec Fellini ? SELECTNomActeur FROM Joue WHERE Joue.Codefilm NOT IN (SELECT Film.Codefilm FROM Film WHERE Réalisateur = Fellini) ; Retrouve tous les acteurs ayant tourné au moins un film dont le réalisateur nest pas Fellini. SELECTNomActeur FROM Joue J1 WHERE J1. NomActeur NOT IN (SELECT J2. NomActeur FROM Film F, Joue J2 WHERE Réalisateur = Fellini AND F.Codefilm = J2.Codefilm ) ;

59 59 © C. HANACHI, J.M. THEVENIN 5.5 Travail sur le résultat dune requête SQL Travail sur le résultat dune requête SQL Les clauses suivantes sont interprétées après la clause WHERE. Elles permettent deffectuer un traitement supplémentaires avant dafficher le résultat 5.1. Tri du résultat 5.2. Effectuer un calcul sur le résultat 5.3. Effectuer des sous-totaux 5.4. Restrictions sur les sous-totaux

60 60 © C. HANACHI, J.M. THEVENIN 5.1 Tri du résultat ORDER BY : permet de trier le résultat Dernière clause dune requête SQL. Les colonnes sur lesquelles le résultat est trié sont désignées par leur nom ou leur n° dapparition dans la clause SELECT ASC : tri croissant, DESC : tri décroissant Ex : afficher les pays dans lordre alphabétique SELECT NomP FROM Pays ORDER BY NomP ASC ; Ex : afficher pour chaque pays le ratio superficie/nombre dhabitants. Trier les pays par ordre décroissant de ce ratio. SELECT NomP AS Pays, Superficie/NbHab AS Occupation FROM Pays ORDER BY 2 DESC, 1 ASC ; Remarque : Le tri sur la colonne 1 indique que les pays ayant le même ration sont affichés dans lordre alphabétique

61 61 © C. HANACHI, J.M. THEVENIN 5.2 Effectuer un calcul sur le résultat Fonctions Agrégat : SQL propose 5 fonctions permettant deffectuer un calcul sur une colonne du résultat SUM(Att) effectue la somme des valeurs de la colonne Att MIN(Att) restitue la plus petite valeur de la colonne Att MAX(Att) restitue la plus grande valeur de la colonne Att MOY(Att) effectue la moyenne des valeurs de la colonne Att COUNT(*) compte le nombre de lignes du résultat. COUNT(DISTINCT Att) compte le nombre de valeurs différentes dans la colonne Att Remarque : lutilisation de ces fonctions agrège le résultat de la requête en une seule ligne qui affiche le résultat des fonctions.

62 62 © C. HANACHI, J.M. THEVENIN Effectuer un calcul sur le résultat Ex : afficher le nombre total de films ainsi que leur durée moyenne SELECT Count(*) AS NombreDeFilms, MOY(Durée) AS DuréeMoyenne FROM Film ; => FILM CodeFilmDuréeRéalisateurAnnée F12Fellini82 F2283Verneuil F31h30Fellini80 NombreDeFilms DuréeMoyenne 3 1h50

63 63 © C. HANACHI, J.M. THEVENIN 5.3 Effectuer des sous-totaux GROUP BY : permet de partitionner le résultat de la clause WHERE en sous ensembles sur lesquels on peut appliquer des fonctions agrégat Cette clause se place derrière la clause WHERE Les lignes du résultat sont triées sur les colonnes indiquées dans la clause GROUP BY. Un nouveau sous-ensemble est créé à chaque changement de valeur dans les colonnes du tri Les fonctions agrégat peuvent être appliquées aux sous-ensembles de valeurs des colonnes Remarque : lutilisation de cette clause agrège le résultat de la requête en une ligne par paquet Lorsque la requête comporte une clause GROUP BY, la clause SELECT spécifie généralement les colonne de groupement plus des fonctions agrégat

64 64 © C. HANACHI, J.M. THEVENIN Effectuer des sous-totaux Ex : afficher pour chaque acteur le nombre total de films dans lesquels il a joué SELECT NomActeur, Count(DISTINCT CodeFilm) FROM Film GROUP BY NomActeur ; => NomActeur COUNT(DISTINCT CodeFilm) Mastroiani 1 JOUE CodeFilm*NomActeur* F2Signoret F2Montant F3Mastroiani F3Montant JOUE CodeFilm*NomActeur* F2Signoret F2Montant F3Mastroiani F3Montant GOUP BY NomActeur Montant 2 Signoret 1

65 65 © C. HANACHI, J.M. THEVENIN 5.4. Restrictions sur les sous- totaux HAVING : permet déliminer des sous- ensembles du résultat lorsquil est partitionné par une clause GROUP BY Cette clause se place derrière la clause GROUP BY Permet deffectuer des restriction sur les résultats fonctions agrégat appliquées aux sous-ensembles de valeurs des colonnes Lorsque quun prédicats est évalué à FAUX, le sous- ensemble est éliminé

66 66 © C. HANACHI, J.M. THEVENIN Restrictions sur les sous-totaux Ex : afficher le nom des acteurs qui ont joué dans au moins deux films SELECT NomActeur FROM Joue GROUP BY NomActeur HAVING COUNT(DISTINCT CodeFilm)>=2 ; JOUE CodeFilm*NomActeur* F2Signoret F2Montant F3Mastroiani F3Montant CodeFilm*NomActeur* F2Signoret F2Montant F3Mastroiani F3Montant GOUP BY NomActeur T2 CodeFilm*NomActeur* F2Signoret F2Montant F3Mastroiani F3Montant HAVING COUNT(DISTINCT CodeFilm)>=2 NomActeur Montant => T1


Télécharger ppt "1 © C. HANACHI, J.M. THEVENIN DESS DSI Cours d informatique 3ème Partie : Interroger une Base de Données Cours de Mr Thévenin Polycopié"

Présentations similaires


Annonces Google