720 likes | 903 Views
Introduction aux Bases de Données. DESS DSI Cours d ’informatique 3ème Partie : Interroger une Base de Données Cours de Mr Thévenin thevenin@univ-tlse1.fr Polycopié réalisé par C. HANACHI, J.M. THEVENIN. 3ème Partie : Interroger une Base de DonnéesRelationnelle.
E N D
Introduction aux Bases de Données DESS DSICours d ’informatique3ème Partie : Interroger une Base de DonnéesCours de Mr Théveninthevenin@univ-tlse1.frPolycopié réalisé par C. HANACHI, J.M. THEVENIN
3ème Partie :Interroger une Base de DonnéesRelationnelle 4. L’algèbre relationnelle5. Le langage SQL
Chapitre 4L’algèbre relationnelle 1. Les différents types de langages 2. Bases théoriques 3. Opérations utilisées4. Projection 5. Restriction 6. Jointure 7. Démarche d’interrogation 8. Exemples 9. Union 10. Différence 11. Intersection 12. Démarche de simplification
Langage Algébrique Langage Graphique R S R S = Cte a b c Afficher x x x Critères =Cte a, b, c Res Langage SQL SELECT a,b,c FROM R,S WHERE R S and =Cte SGBD a b c 4.1 Les différents types de langages BD
Les différents types de langages • SQL : • Langage puissant et complet • Interface standard des SGBD • Langages graphiques • Plus faciles d’accès • Permettent d’exprimer des requêtes SQL simples • Un langage graphique est spécifique à un SGBD (certains SGBD n’en 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
Relation S Relation R s1 s2 r1 r2 r3 OP1 OP3 OP2 Table T1 r1 r2 r3 Table T2 r1 r2 r3 s1 s2 Table Résultat r3 s2 4.2 Bases théoriques • Théorie des ensembles
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)
Relation R a b c R a b c Attribut b Afficher x b b 4.4 Projection • Opération permettant d’éliminerlescolonnes qui ne nous intéressent pas dans une table • Ex : Afficher les noms de pays source d’un fleuve Langage algébrique Langage graphique Langage SQL SELECT b FROM R
Relation R a b c R a b c a b c 10 10 4.5 Restriction • Opération permettant d’éliminerleslignes qui ne nous intéressent pas dans une table • Ex : Liste des pays dont la superficie est supérieure à 1 000 000 Km2 Langage algébrique Langage graphique Langage SQL 1 10 2 10 WHERE b=10 Attribut b Afficher Critère =10 b=10
S c d R a b c Relation R Relation R Relation S Relation S a b c a b c c d c d 3 canard 3 canard 3 canard 1 cochon 1 cochon 2 loup 3 canard 4 poule R.c=S.c riri 3 fifi 3 loulou 3 nafnaf 1 4.5 Jointure • Opération permettant de relierdeslignes 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 Langage algébrique Langage graphique Langage SQL riri 3 fifi 3 loulou 3 nafnaf 1 WHERE R.c=S.c
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
4.7 Démarche • Soit une question Q que l’on souhaite poser au SGBD a) identifier sur le schéma E/A les propriétés que l’on 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
4.8 Exemples Schéma E/A 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*)
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
Exemples Q3 Liste des fleuves de plus de 500 Km se jetant dans une mer Q4 Liste des pays qui côtoient l’espace maritime dans le quel se jette le Rhône
Exemples Q5 Liste des pays qui côtoient les espaces maritimes dans lesquels se jette un fleuve prenant sa source en France
Relation R a b c a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 4.9 Union • Opération permettant d’ajouter des lignes à une table • Ex : Insérer les animaux ‘nifnif’ et ‘titi’ Langage algébrique Langage graphique Langage SQL Relation Temp a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 Insert Into R Values (‘nifnif’,,1) Values (‘titi’,,5); Pas possible U Relation R
S U T R P2 P1 Résultat satisfaitant Q1 OU Q2 a1,a2 a1,a2 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 Langage algébrique Langage graphique Langage SQL Q1 Select a1,a2 From R, S Where P1 and R S UNION Select a1,a2 From T, U Where P2 and T U Pas possible Q2 Q2 Q1 U
Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 4.10 Différence • Opération permettant de supprimer des lignes à une table • Ex : Supprimer les animaux ‘nifnif’ et ‘titi’ Langage algébrique Langage graphique Langage SQL Relation Temp a b c nifnif 1 titi 5 Delete From R Where a=‘nifnif’ Or a=‘titi’; Pas possible _
Différence • Opération permettant de trouver les lignes présentes dans une table et pas dans l’autre • Utile pour tester l’absence 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 d’une table reliées aux lignes d’une 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.
P C Résultat satisfaitant NE … PAS 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 Langage algébrique Langage graphique Langage SQL EM Select NomP From P MINUS Select NomP From C, EM Where type=‘mer’ and C EM Pas possible Q1 Type=‘mer’ NomP Q2 NomP Q1 _ Q2
EM Type = ‘ mer ’ et Type = ‘ océan ’ 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 :
S S R R P2 P1 Résultat satisfaitant P1 et P2 a1,a2 a1,a2 U Intersection • Faire des intersections de questions • Ex : liste des pays côtoyant une mer ET un océan Langage algébrique Langage graphique Langage SQL Select a1,a2 From R, S Where P1 and R S INTERSECT Select a1,a2 From R, S Where P2 and R S Pas possible Q1 Q1 Q2 Q2
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 )
Chapitre 5Le langage de requêtes SQL 1. Introduction 2. Langage déclaratif 3. Syntaxe générale d’une requête SQL4. 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 d’une 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
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.
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 l’accès aux données (verbes GRANT, REVOKE) • La manipulation des données : suppression, modification, insertion dans une relation (verbes DELETE, UPDATE, INSERT) • L’interrogation d'une base de données (verbe SELECT) • Ce chapitre est centré sur l’interrogation
5.2 Langage déclaratif • SQL est un langage déclaratif : • L'utilisateur définit le résultat à obtenir à l’aide de prédicats (QUOI), le système optimise la procédure de recherche (COMMENT) • Par opposition à l’algèbre relationnelle qui introduit un ordre dans l’enchaînement des opérations • Par opposition aux langages impératifs : Basic, Pascal, C, Java ...
F T P T P F Résultat Résultat Langage déclaratif • Efficacité d’une requête : P = Pays T = Traverser F = Fleuves Solution 1 Solution 2 NomF=‘ Rhône’ T.Nomf=F.Nomf P.Nomp=T.NomP P.Nomp=T.NomP T.Nomf=F.Nomf NomF=‘Rhône’’ NomP, Superficie NomP, Superficie
Langage déclaratif • Optimisation : Opération 1 F T P NomF=‘Rhône’’ NomF Opération 2 T.NomF=F.NomF NomF Opération 3 P.NomP=T.NomP NomP, Superficie Résultat
5.3 Syntaxe générale d’une requête SQL SELECT <liste des attributs du résultat> FROM <liste des relations impliquées dans la requête> WHERE <formule de sélection : expression logique utilisant les constituants des relations présentes dans le FROM> ; • 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
SELECT a1,a2 FROM R, S WHERE P1 and R S P1 R S a1,a2 R S Syntaxe générale d’une requête SQL • Correspondance entre le SQL et le langage algébrique • L’ordre des prédicats dans la clause WHERE n’a pas d’importance (l’ordre 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
5.4 Syntaxe détaillée • Base d’exemple 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.
5.4.1 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 s’il n ’y a pas d’ambiguité sur sa provenance SELECT Réalisateur FROM Film ; • DISTINCT : permet d’éliminer les lignes en double dans le résultat • Ex : chaqueRéalisateurs n’est affiché qu’une fois SELECT DISTINCT Réalisateur FROM Film ;
Expression de la projection • * : permet de désigner tous les attributs d’une table • Ex : afficher la table Film SELECT Film.* FROM Film ; ou SELECT * FROM Film ; • Expression d’un 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 à l’année et une valeur constante (100)
Expression de la projection • AS : permet de spécifier l’entête d’une colonne affichée dans le résultat • Ex : afficher pour chaque pays le ratio superficie/nombre d’habitants 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 d’une 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 ;
5.4.2 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 ? SELECT titre FROM film WHERE année = 1998 ;
Expression des restrictions • Prédicat composé : • Combinaison de prédicats reliés par les connecteur AND (ET), OR (OU) • L’utilisation 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’;
Expression des restrictions • NOT : inverse le résultat d’un 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<1980 OR 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 ;
Expression des restrictions • IN : teste si la valeur d’une 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 n’ont pas été réalisés par : PARKER, MALLE, ou VERNEUIL ? SELECT Titre FROM Film WHERE Réalisateur NOT IN (‘PARKER’, ’MALLE’, ’VERNEUIL’) ;
Expression des restrictions • LIKE : comparer la chaîne de caractère d’une 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 d’une 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’
5.4.3 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é ? SELECT NomActeur,Réalisateur FROM Film, Joue WHEREFilm.Codefilm = Joue.Codefilm;
CodeFilm CodeFilm Durée Durée Réalisateur Réalisateur Année Année F1 F1 F1 F1 F1 2 2 2 2 2 Fellini Fellini Fellini Fellini Fellini 82 82 82 82 82 Verneuil Verneuil Verneuil Verneuil Verneuil F3 F3 F3 F3 F3 1h30 1h30 1h30 1h30 1h30 Fellini Fellini Fellini Fellini Fellini 80 80 80 80 80 Signoret Signoret Signoret Signoret F2 F2 F2 F2 Montant Montant Montant Montant CodeFilm CodeFilm * * NomActeur* NomActeur* F3 F3 F3 F3 Mastroiani Mastroiani Mastroiani Mastroiani F3 F3 F3 F3 Montant Montant Montant Montant F2 F2 F2 F2 2 2 2 2 83 83 83 83 Expression des jointures JOUE FILM F2 F2 2 83 FILM XJOUE F2 F2 F2 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 d’acteurs
Expression des jointures • Semi-Jointure : • Lorsque l’on veut tester si une ligne d’une première table est reliée à au moins une ligne d’une seconde table, mais que l’on n’affiche pas les informations de la seconde table • Plus rapide qu’une vraie jointure (car dès que l’on a trouvé un lien, on peut tester la ligne suivante) • Ex : Qui a joué avec Fellini ? SELECT NomActeur FROM Joue, Film WHEREJoue.Codefilm = Film.Codefilm AND Réalisateur = ‘Fellini ‘ ;
Expression des jointures • IN : expression d’une 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 l’attribut de jointure de la relation dite externe (RelExt.AttJ IN (SELECT …)) • Cet ensemble de valeurs est extrait parmis les valeurs de l’attribut de jointure de la relation dite interne ((SELECT Attj FROM RelInt …)) • Ex : Qui a joué avec Fellini ? SELECT NomActeur FROM Joue WHERE Joue.Codefilm IN (SELECT Film.Codefilm FROM Film WHERE Réalisateur = ‘Fellini ‘) ;
CodeFilm F1 F3 Expression des jointures • Ex (suite) SELECT Film.Codefilm FROM Film WHERE Réalisateur = ‘Fellini ‘ SELECT Joue.NomActeur FROM Joue WHERE Joue.Codefilm IN (‘F1’, ’F3’ );
Expression des jointures • EXISTS : tester l'existence d’un 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 l’attribut 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 ? SELECT NomActeur FROM Joue WHERE EXISTS (SELECT * FROM Film WHERE Réalisateur = ‘Fellini ‘ AND Film.Codefilm = Joue.Codefilm) ;
5.4.4. 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
Expression des unions, intersections, différences • Ex : Liste des pays ne côtoyant ni espace maritime, ni fleuve SELECT NomP FROM Pays MINUS (SELECT NomP FROM Cotoyer UNION SELECT NomP FROM Traverser) ;