Introduction aux Bases de Données

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom.
Bases de Données Avancées: Bases de Données Relationnelles
Langage de manipulation de données Ensemble de commandes permettant : – modifier la base : ajout, modification et suppression – interroger la base ex :
Licence pro MPCQ : Cours
Additions soustractions
Distance inter-locuteur
Bureautique Excel-VBA et Access – Cours 2 Dominante Économie et Gestion dEntreprise AgroParisTech Année Liliana IBANESCU et Laurent ORSEAU UFR.
Évaluation des requêtes relationnelles
Les numéros 70 –
Les numéros
Les identités remarquables
Le, la, les words Possessive Adjectives MINE!!. 2 My in french is mon, ma,mes... Le word/ begins with a vowel: Mon La word: Ma Les word: Mes.
Algèbre relationnelle
Introduction à la logique
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Georges Gardarin 1 LE LANGAGE DE REQUETES SQL l Origines et Evolutions l SQL1 86: la base l SQL1 89: l'intégrité l SQL2 92: la nouvelle norme l SQL3 98:
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Introduction aux Bases de Données
Optimisation de Requêtes
Les Requêtes S.Q.L « Structured Query Language)
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Les fonctions.
LMD: Langage de Manipulation de Données
Contrôles d'accès aux données
Eléments d ’algèbre relationnelle
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
Regrouper les Données avec les Fonctions de Groupe
LE LANGAGE SQL Langage de manipulation de données (LMD)
Mise en œuvre du langage MDX - 1 ère partie- Présentation de lexemple et des outils utilisés -1-
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Titre : Implémentation des éléments finis sous Matlab
L’utilisation des bases de données
LES NOMBRES PREMIERS ET COMPOSÉS
Cours N°2 Base de Données & Langage SQL
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
Logiciel gratuit à télécharger à cette adresse :
Les chiffres & les nombres
Mise en œuvre du langage MDX
RACINES CARREES Définition Développer avec la distributivité Produit 1
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Cours N°2 Base de Données & Langage SQL
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Titre : Implémentation des éléments finis en Matlab
Manipulation des données Requêtes simples
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Initiation aux bases de données et à la programmation événementielle
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
Aire d’une figure par encadrement
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Limiter et trier des données
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Le langage SQL LDD : Langage de Définition de Données
Nom:____________ Prénom: ___________
Mise en œuvre du langage MDX
Sélection de colonnes (la projection)
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Langage de manipulation de données (LMD)
Manipulation D’Une Base De Données
Transcription de la présentation:

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 © C. HANACHI, J.M. THEVENIN

© C. HANACHI, J.M. THEVENIN

3ème Partie : Interroger une Base de DonnéesRelationnelle 4. L’algèbre relationnelle 5. Le langage SQL © C. HANACHI, J.M. THEVENIN

Chapitre 4 L’algè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 d’interrogation 8. Exemples 9. Union 10. Différence 11. Intersection 12. Démarche de simplification © C. HANACHI, J.M. THEVENIN

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

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 © C. HANACHI, J.M. THEVENIN

4.2 Bases théoriques Théorie des ensembles Relation S Relation R s1 s2 r1 r2 r3 Relation S s1 s2 OP1 Table T1 r1 r2 r3 OP2 Table T2 r1 r2 r3 s1 s2 Table Résultat r3 s2 OP3 © 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) © 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 d’un fleuve Langage algébrique Langage graphique Langage SQL Relation R a b c b R a b c Attribut b Afficher x SELECT b FROM R © 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 à 1 000 000 Km2 Langage algébrique Langage graphique Langage SQL Relation R a b c R a b c 1 10 2 WHERE b=10 b=10 Attribut b Afficher Critère =10 a b c 10 © 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 Langage algébrique Langage graphique Langage SQL Relation R a b c Relation S c d 1 cochon 2 loup 3 canard 4 poule R a b c S c d riri 3 fifi 3 loulou 3 nafnaf 1 WHERE R.c=S.c R.c=S.c Relation R a b c Relation S c d 3 canard 1 cochon riri 3 fifi 3 loulou 3 nafnaf 1 © 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 © C. HANACHI, J.M. THEVENIN

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 © C. HANACHI, J.M. THEVENIN

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*) © 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 © 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 l’espace maritime dans le quel se jette le Rhône © 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 © C. HANACHI, J.M. THEVENIN

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 R a b c 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 a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 © 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 Langage algébrique Langage graphique Langage SQL Q1 R S P1 a1,a2 T U P2 a1,a2 Select a1,a2 From R, S Where P1 and R S UNION From T, U Where P2 and T U Pas possible Q1 Q2 Q2 U Résultat satisfaitant Q1 OU Q2 © 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’ Langage algébrique Langage graphique Langage SQL a b c riri 3 fifi 3 loulou 3 nafnaf 1 nifnif 1 titi 5 Relation R Relation Temp a b c nifnif 1 titi 5 Delete From R Where a=‘nifnif’ Or a=‘titi’; Pas possible _ Relation R a b c riri 3 fifi 3 loulou 3 nafnaf 1 © C. HANACHI, J.M. THEVENIN

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. © 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 Langage algébrique Langage graphique Langage SQL P C EM Select NomP From P MINUS From C, EM Where type=‘mer’ and C EM Pas possible Type=‘mer’ Q1 Q1 NomP NomP Q2 _ Q2 Résultat satisfaitant NE … PAS © 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 ’ © C. HANACHI, J.M. THEVENIN

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 U Résultat satisfaitant P1 et P2 R S P1 a1,a2 P2 Select a1,a2 From R, S Where P1 and R S INTERSECT Where P2 Pas possible Q1 Q1 Q2 Q2 © 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 ( liste des pays côtoyant un espace maritime liste des pays côtoyant un fleuve ) © C. HANACHI, J.M. THEVENIN

Chapitre 5 Le langage de requêtes SQL 1. Introduction 2. Langage déclaratif 3. Syntaxe générale d’une 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 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 © 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. © 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 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 © C. HANACHI, J.M. THEVENIN

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 ... © C. HANACHI, J.M. THEVENIN

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

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

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 © C. HANACHI, J.M. THEVENIN

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 R S P1 a1,a2 SELECT a1,a2 FROM R, S WHERE P1 and R S R S © C. HANACHI, J.M. THEVENIN

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. © C. HANACHI, J.M. THEVENIN

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 DISTINCT : permet d’éliminer les lignes en double dans le résultat Ex : chaque Réalisateurs n’est affiché qu’une fois SELECT DISTINCT Réalisateur FROM Film ; © C. HANACHI, J.M. THEVENIN

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 * 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 Remarque : ce calcul utilise la fonction modulo appliquée à l’année et une valeur constante (100) © C. HANACHI, J.M. THEVENIN

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 ; © C. HANACHI, J.M. THEVENIN

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 ; © C. HANACHI, J.M. THEVENIN

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’; © C. HANACHI, J.M. THEVENIN

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 : WHERE NOT (Année<1980 OR Année>1983) ; BETWEEN : pour spécifier un prédicat comportant un interval WHERE Année BETWEEN 1980 AND 1983 ; © C. HANACHI, J.M. THEVENIN

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 ? WHERE Réalisateur IN (‘PARKER’,  ’MALLE’, ’VERNEUIL’) ; Ex : Films qui n’ont pas été réalisés par : PARKER, MALLE, ou VERNEUIL ? WHERE Réalisateur NOT IN © C. HANACHI, J.M. THEVENIN

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 ? WHERE UPPER(Réalisateur) =‘MALLE’ © C. HANACHI, J.M. THEVENIN

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 WHERE Film.Codefilm = Joue.Codefilm; © C. HANACHI, J.M. THEVENIN

Expression des jointures FILM JOUE CodeFilm Durée Réalisateur Année CodeFilm * NomActeur* F1 2 Fellini 82 Signoret F2 Verneuil F2 2 83 F2 Montant F3 1h30 Fellini 80 F3 Mastroiani F3 Montant FILM X JOUE CodeFilm Durée Réalisateur Année * NomActeur* F1 2 Fellini 82 Signoret F2 F1 2 Fellini 82 F2 Montant F1 2 Fellini 82 F3 Mastroiani F1 2 Fellini 82 F3 Montant Verneuil F2 2 83 Signoret F2 Verneuil F2 2 83 F2 Montant Verneuil F2 2 83 F3 Mastroiani Verneuil F2 2 83 F3 Montant F3 1h30 Fellini 80 Signoret F2 F3 1h30 Fellini 80 F2 Montant F3 1h30 Fellini 80 F3 Mastroiani F3 1h30 Fellini 80 F3 Montant 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 © C. HANACHI, J.M. THEVENIN

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 WHERE Joue.Codefilm = Film.Codefilm AND Réalisateur = ‘Fellini ‘  ; © C. HANACHI, J.M. THEVENIN

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 ‘) ; © C. HANACHI, J.M. THEVENIN

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’ ); CodeFilm F1 F3 © C. HANACHI, J.M. THEVENIN

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) ; © C. HANACHI, J.M. THEVENIN

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 © C. HANACHI, J.M. THEVENIN

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) ; © 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 ; © 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 WHERE Genre = ‘Policier’ AND J.NomActeur = A.Nom ; © C. HANACHI, J.M. THEVENIN

Expression des intersections Jointure : l’intersection peut aussi s’exprimer à l’aide d’une 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 ; © C. HANACHI, J.M. THEVENIN

Expression des différences MINUS : questions avec NE … PAS, Ex : Nom et prénom des acteurs qui n’ont pas joué dans des comédies SELECT Nom, 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 l’absence 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) © C. HANACHI, J.M. THEVENIN

Expression des différences NOT IN : La différence peut aussi s’exprimer à 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 l’ensemble de valeurs produit par la sous-requête. => résultat = relation externe - sous-requête Ex : Nom et prénom des acteurs qui n’ont pas joué dans des comédies SELECT Nom, 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) ; © C. HANACHI, J.M. THEVENIN

Expression des différences Ex : Nom et prénom des acteurs qui n’ont pas joué dans des comédies (suite) Optimisation des jointures SELECT Nom, 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 © C. HANACHI, J.M. THEVENIN

Tester l’absence de lien NOT EXISTS : tester l’absence 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 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 n’a jamais joué avec Fellini ? SELECT NomActeur 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) © C. HANACHI, J.M. THEVENIN

Tester l’absence de lien NOT IN : tester l’absence de lien via une sous-requête ATTENTION ! Ne pas confondre le mode d’emploi des prédicats IN et EXISTS Ex : Qui n’a jamais joué avec Fellini ? SELECT NomActeur 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 n’est pas Fellini. 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 ) ; © C. HANACHI, J.M. THEVENIN

5.5 Travail sur le résultat d’une requête SQL Les clauses suivantes sont interprétées après la clause WHERE. Elles permettent d’effectuer un traitement supplémentaires avant d’afficher 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 © C. HANACHI, J.M. THEVENIN

5.1 Tri du résultat ORDER BY : permet de trier le résultat Dernière clause d’une requête SQL. Les colonnes sur lesquelles le résultat est trié sont désignées par leur nom ou leur n° d’apparition dans la clause SELECT ASC : tri croissant, DESC : tri décroissant Ex : afficher les pays dans l’ordre alphabétique SELECT NomP FROM Pays ORDER BY NomP ASC ; Ex : afficher pour chaque pays le ratio superficie/nombre d’habitants. 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 l’ordre alphabétique © C. HANACHI, J.M. THEVENIN

5.2 Effectuer un calcul sur le résultat Fonctions Agrégat : SQL propose 5 fonctions permettant d’effectuer 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 : l’utilisation de ces fonctions agrège le résultat de la requête en une seule ligne qui affiche le résultat des fonctions. © 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 CodeFilm Durée Réalisateur Année F1 2 Fellini 82 F2 83 Verneuil F3 1h30 80 NombreDeFilms DuréeMoyenne 3 1h50 © 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 : l’utilisation 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 © 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 ; => JOUE CodeFilm* NomActeur* F2 Signoret Montant F3 Mastroiani GOUP BY NomActeur JOUE CodeFilm* NomActeur* F2 Signoret Montant F3 Mastroiani NomActeur COUNT(DISTINCT CodeFilm) Mastroiani 1 Montant 2 Signoret 1 © C. HANACHI, J.M. THEVENIN

5.4. Restrictions sur les sous-totaux HAVING : permet d’éliminer des sous-ensembles du résultat lorsqu’il est partitionné par une clause GROUP BY Cette clause se place derrière la clause GROUP BY Permet d’effectuer des restriction sur les résultats fonctions agrégat appliquées aux sous-ensembles de valeurs des colonnes Lorsque qu’un prédicats est évalué à FAUX, le sous-ensemble est éliminé © 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* F2 Signoret Montant F3 Mastroiani GOUP BY NomActeur T1 CodeFilm* NomActeur* F2 Signoret Montant F3 Mastroiani HAVING COUNT(DISTINCT CodeFilm)>=2 T2 CodeFilm* NomActeur* F2 Signoret Montant F3 Mastroiani => NomActeur Montant © C. HANACHI, J.M. THEVENIN