13.07.2015 Views

INSIA - ING 1 Bases de données Piscine MySQL – Cours et TP n° 07

INSIA - ING 1 Bases de données Piscine MySQL – Cours et TP n° 07

INSIA - ING 1 Bases de données Piscine MySQL – Cours et TP n° 07

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>INSIA</strong> - <strong>ING</strong> 1<strong>Bases</strong> <strong>de</strong> données<strong>Piscine</strong> <strong>MySQL</strong> – <strong>Cours</strong> <strong>et</strong> <strong>TP</strong> n° <strong>07</strong>Jointure artificielle, imbrication <strong>de</strong> select, opérations ensemblistesEquivalences entre ces opérationsVueLA BIBLE : <strong>MySQL</strong> 5.0 Reference Manualhttp://<strong>de</strong>v.mysql.com/doc/refman/5.0/fr/in<strong>de</strong>x.htmlSite officiel MySql : http://www-fr.mysql.com/Documentation <strong>MySQL</strong> : http://mysql.org/La Base <strong>de</strong> Données Open Source la plus Populaire au Mon<strong>de</strong>Bertrand LIAUDETSOMMAIRESOMMAIRE 1SQL : CONSULTATION DE LA BD - SUITE 31. Rappels sur les opérations s’appliquant à plusieurs tables 3Classification générale <strong>de</strong>s opérations s’appliquant à plusieurs tables 3Classification générale <strong>de</strong>s jointures 3Opérations élémentaires constituant une jointure 3Produit cartésien 32. Les jointures artificielles 5Définition 5Exemple 63. Les requêtes imbriquées 7Présentation 7Select imbriqué dans le from 8Select imbriqué dans le where avec comparaison entre les select principal <strong>et</strong> imbriquéALL <strong>et</strong> ANY 9Select imbriqué dans le where avec test <strong>de</strong> la cardinalité vi<strong>de</strong> ou pas du selectimbriqué EXISTS <strong>et</strong> NOT EXISTS 11<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 1/24 - Bertrand LIAUDET


4. Transformation <strong>de</strong>s select imbriqués dans le where 13Transformation en jointure artificielle 13Transformation en select imbriqué dans le from 13Cas où la transformation est impossible 135. La notion <strong>de</strong> « Vue » 15Présentation 15Les 2 usages <strong>de</strong>s vues 166. Opérations ensemblistes 17Principe général <strong>de</strong>s opérations ensemblistes 17Union 17Différence 18Intersection 18Equivalence entre MINUS, INTERSECT <strong>et</strong> les requêtes imbriquées 19<strong>TP</strong> N°7 : JOINTURE ARTIFICIELLE, IMBRICATION DE SELECT,OPERATIONS ENSEMBLISTES 20Présentation 20Métho<strong>de</strong> 20Travail à faire 20Métho<strong>de</strong> <strong>de</strong> travail 20Ordre <strong>de</strong> projection <strong>de</strong>s attributs 20Exercice 1 : BD employés <strong>et</strong> départements 20Présentation 21Interrogation <strong>de</strong> la BD 21Exercice 2 : BD biblio 23Présentation 23Interrogation <strong>de</strong> la BD 23Première édition : septembre 20<strong>07</strong>Deuxième édition : novembre 2008<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 2/24 - Bertrand LIAUDET


SQL : CONSULTATION DE LA BD - SUITEJointure artificielleOpération ensemblisteEXISTS, NOT EXISTSUNIONPRINCIPALES NOTIONSRequête imbriquéeANY, ALLIN, NOT INMINUS, INTERSECT1. Rappels sur les opérations s’appliquant à plusieurs tablesClassification générale <strong>de</strong>s opérations s’appliquant à plusieurs tablesIl y a trois sortes d'opérations s'appliquant à plusieurs tables :• les jointures• les opérations ensemblistes• les sous interrogationsClassification générale <strong>de</strong>s jointuresLes jointures se divisent en 3 cas :• Les jointures naturelles• Les jointures artificielles• Les jointures externesOpérations élémentaires constituant une jointureUne jointure est constituée <strong>de</strong> :• Un produit cartésien• Une restriction <strong>de</strong> jointureProduit cartésienDéfinitionLe produit cartésien <strong>de</strong> <strong>de</strong>ux tables est l’opération <strong>de</strong> base <strong>de</strong> la jointure.Le produit cartésien est l’opération qui va perm<strong>et</strong>tre <strong>de</strong> réunir les attributs <strong>de</strong> <strong>de</strong>ux tables dansune nouvelle table.Il produit une table constituée <strong>de</strong> la concaténation <strong>de</strong> tous les attributs <strong>de</strong>s <strong>de</strong>ux tables <strong>de</strong> départ<strong>et</strong> <strong>de</strong> tous les tuples formés par la concaténation <strong>de</strong> chaque tuple <strong>de</strong> la première table à tousceux <strong>de</strong> la <strong>de</strong>uxième.Syntaxe SQL<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 3/24 - Bertrand LIAUDET


Clé primaireSelect * from table_1, table_2 ;La clé primaire est constituée <strong>de</strong> la concaténation <strong>de</strong>s clés primaires <strong>de</strong>s tables du produitcartésien.Nombre <strong>de</strong> tuplesCP = CP1, CP2Si la première table contient T1 tuples <strong>et</strong> la <strong>de</strong>uxième T2 tuples, le produit cartésien est un<strong>et</strong>able qui contient :Nombre d’attributsN1 * N2 tuplesSi la première table contient A1 attributs <strong>et</strong> la <strong>de</strong>uxième A2 attributs, le produit cartésien est un<strong>et</strong>able qui contient :Usage du produit cartésienA1 + A2 attributs.D’un point <strong>de</strong> vue pratique, le produit cartésien est l’opération qui perm<strong>et</strong> <strong>de</strong> :réunir les attributs <strong>de</strong> <strong>de</strong>ux tables dans une nouvelle table.On utilise le produit cartésien dès qu’une requête m<strong>et</strong> en jeu <strong>de</strong>ux attributs qui appartiennent à<strong>de</strong>ux tables différentes.SignificationLe produit cartésien <strong>de</strong> <strong>de</strong>ux tables n'a jamais <strong>de</strong> signification.Il <strong>de</strong>vient significatif quand on l'associe à une restriction qui m<strong>et</strong> en jeu un attribut <strong>de</strong> la premièr<strong>et</strong>able <strong>et</strong> un attribut <strong>de</strong> la secon<strong>de</strong> : on l'appelle alors jointure.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 4/24 - Bertrand LIAUDET


2. Les jointures artificiellesDéfinitionConcept central <strong>de</strong> l’algèbre relationnelleLa jointure est le concept central <strong>de</strong> l'algèbre relationnelle <strong>et</strong> donc <strong>de</strong>s bases <strong>de</strong> données engénéral.Comprendre ce qu'est une jointure, c'est comprendre ce qu'est une base <strong>de</strong> données relationnelle.La jointure <strong>de</strong> <strong>de</strong>ux tables c'est leur produit cartésien <strong>et</strong> la restriction consistant à comparer unattribut <strong>de</strong> la première table à un attribut <strong>de</strong> la <strong>de</strong>uxième table.Select *from table_1, table_2where table_1.attribut_1 opérateur table_2.attribut_2;La clause where d'une jointure peut faire intervenir n'importe quel opérateur <strong>de</strong> l'algèbrebooléen. En général, la jointure utilise l'opérateur "=".On distingue <strong>de</strong>ux types <strong>de</strong> jointures :• les jointures naturelles• les jointures artificielles.Jointure naturelleLa jointure naturelle perm<strong>et</strong> <strong>de</strong> regrouper <strong>de</strong>ux tables ayant un attribut en commun particulier :celui <strong>de</strong> la première table est une clé étrangère, celui <strong>de</strong> la <strong>de</strong>uxième est la clé primaire pour satable, clé correspondant à la clé étrangère <strong>de</strong> la première table.La comparaison entre les <strong>de</strong>ux attributs est une égalité : opérateur "="Select *from table_Maître, table_Jointewhere table_Maitre.clé_étrangère = table_2.clé_primaire ;ou encore, avec TM pour la table maître, TJ pour la table jointe, NTJ clé primaire <strong>de</strong> la tablejointe :Select *from TM, TJwhere TM.NTJ = TJ.NTJ;<strong>de</strong> jointure naturelleC<strong>et</strong>te restriction : TM.NTJ = TJ.NTJ est appelée « restriction <strong>de</strong> jointure naturelle».<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 5/24 - Bertrand LIAUDET Restriction


Jointure artificielleExempleLa jointure artificielle est une jointure dont la restriction n’est pas une restriction <strong>de</strong> jointurenaturelle : soit elle m<strong>et</strong> en jeu d’autres opérateurs que celui d’égalité, soit elle m<strong>et</strong> en jeu uncouple d’attribut qui n’est pas clé-étrangère <strong>et</strong> clé-primaire correspondante.Tous les employés ayant le même job que JONES :ExplicationsSelect distinct e1.NE, e1.nom, e2.jobfrom emp e1, emp e2where e1.job = e2.job -- restriction <strong>de</strong> jointure artificielleand e2.ename = 'JONES' -- restriction spécifique 1and e1.ename 'JONES' -- restriction spécifique 2Chaque employé est croisé avec tous les employés (produit cartésien).On ne s’intéresse qu’aux employés <strong>de</strong> e2 qui s’appelle JONES (restriction spécifique 1)La restriction <strong>de</strong> jointure artificielle est faite sur job : on ne gar<strong>de</strong> que les employés <strong>de</strong> e1 qui ontle même job que les JONES.On supprime JONES <strong>de</strong> la liste <strong>de</strong>s employés <strong>de</strong> e1 (pour éviter d’avoir JONES dans laréponse).Pour finir, on proj<strong>et</strong>te les employés <strong>de</strong> e1.On m<strong>et</strong> un distinct pour le cas où il y ait plusieurs JONES.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 6/24 - Bertrand LIAUDET


3. Les requêtes imbriquéesPrésentationGénéralitésDans une requête imbriquée, on trouve un ou plusieurs select utilisés dans le select principal (lepremier <strong>de</strong> la requête).On distingue entre le select imbriquant (ou principal) <strong>et</strong> le ou les select imbriqués.On peut avoir autant <strong>de</strong> niveau d’imbrication qu’on veut.2 types <strong>de</strong> select imbriqués• Les select imbriqués dans le « from » : le select imbriqué remplace une table.• Les select imbriqués dans le « where » : le select remplace une valeur ou une liste <strong>de</strong>valeurs possibles dans une restriction.2 types <strong>de</strong> select imbriqués dans le whereDeux types <strong>de</strong> select imbriqué imbriqué dans le where selon la restriction effectuée :• Comparaison <strong>de</strong> chaque tuple du select imbriqué aux tuples du select principal : ALL <strong>et</strong>ANY.• Test <strong>de</strong> la cardinalité vi<strong>de</strong> ou pas <strong>de</strong> la table résultat du select imbriqué : EXISTS <strong>et</strong> NOTEXISTS.Bilan : 3 catégories <strong>de</strong> requêtes imbriqués1. Le select imbriqué dans from qui remplace une table.2. Le select imbriqué dans le where avec comparaison entre le select principal <strong>et</strong> le selectimbriqué : ALL <strong>et</strong> ANY3. Les requêtes imbriquées avec test <strong>de</strong> la cardinalité vi<strong>de</strong> ou pas du select imbriqué : EXISTS<strong>et</strong> NOT EXISTS<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 7/24 - Bertrand LIAUDET


Select imbriqué dans le fromToute table d’un select peut être remplacée par un autre select.: nombre moyen d’employés par départementSelect avg(nb)from (select count(*) nbfrom empgroup by nd ) tnb;syntaxiques Exemple• Le select imbriqué est mis entre parenthèses.• Le select imbriqué est obligatoirement renommé (« tnb » dans notre exemple).• Les attributs proj<strong>et</strong>és dans le select imbriqué sont obligatoirement renommés quand il s’agit<strong>de</strong> fonction <strong>de</strong> groupe. Remarques<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 8/24 - Bertrand LIAUDET


Select imbriqué dans le where avec comparaison entre les select principal <strong>et</strong> imbriquéALL <strong>et</strong> ANYPrésentationLa comparaison <strong>de</strong> chaque tuple résultant d'un premier select aux tuples d'une table résultantd'un <strong>de</strong>uxième select a comme syntaxe générale :Select * from tablewhere liste 1 d'attributs opérateur(select liste 2 d'attributs from ... );c’est un opérateur <strong>de</strong> comparaison booléen classique : =, !=, >, >=,


);select job from empwhere ND = 10Cas où on peut se passer <strong>de</strong> ANY <strong>et</strong> <strong>de</strong> ALLSi le <strong>de</strong>uxième select fournit un seul tuple, on peut se passer <strong>de</strong> l’opérateur spécial. On peut parexemple écrire "=" à la place <strong>de</strong> "= any".C’est le cas particulièrement quand le select imbriqué renvoie une fonction <strong>de</strong> groupe ou quandune restriction s’est faite sur une valeur <strong>de</strong> la clé primaire.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 10/24 - Bertrand LIAUDET


Select imbriqué dans le where avec test <strong>de</strong> la cardinalité vi<strong>de</strong> ou pas du select imbriquéEXISTS <strong>et</strong> NOT EXISTSSi on s'interroge sur l'existence ou la non-existence <strong>de</strong> tuples dans la table résultant du selectimbriqué, on écrira :Select * from tablewhere opérateur (select ...);L'opérateur peut prendre <strong>de</strong>ux valeurs : EXISTS ou NOT EXISTS.En général, le select imbriqué utilise un attribut du select principal qui rend variable son résultaten fonction du tuple en cours du select principal.Opérateur EXISTSLes tuples du select principal sont sélectionnés si le select imbriqué produit au moins un tuple.: tous les employés travaillant dans un département qui contient au moins un'ANALYST' (c'est un métier) :Select NE, nom, ND, job from empwhere exists (select * from emp e1where job = 'ANALYST'and e1.ND = emp.ND);On regar<strong>de</strong> s’il existe un ANALYST dont le département est égal à celui du tuple en cours. Sioui, on gar<strong>de</strong> le tuple en cours. ExempleDans le cas d’un select imbriqué dans le where avec EXISTS, on a forcément une restriction <strong>de</strong>jointure artificielle dans le select imbriqué, sinon le résultat du select imbriqué serait constant <strong>et</strong>le test EXISTS donnerait soit toujours vrai, soit toujours faux, donc on obtiendrait finalementsoit la conservation <strong>de</strong> tous les tuples du select imbriquant, soit l’élimination <strong>de</strong> tous les tuplesdu select imbriquant. ExplicationOpérateur NOT EXISTSRemarqueLes tuples du select principal sont sélectionnés si le select imbriqué ne produit aucun tuples.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 11/24 - Bertrand LIAUDET


Equivalence entre IN <strong>et</strong> EXISTS <strong>et</strong> entre NOT IN <strong>et</strong> NOT EXISTSA la place <strong>de</strong> l’exemple précé<strong>de</strong>nt avec un IN, on pourrait écrire avec un EXISTS :Select NE, nom, ND, job from emp ewhere ND in (select ND from empwhere = 'ANALYST');<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 12/24 - Bertrand LIAUDET


4. Transformation <strong>de</strong>s select imbriqués dans le whereTransformation en jointure artificielleOn peut très souvent transformer les select imbriqués en jointure artificielle.Exemple : tous les employés ayant le même job que les employés du département 10Select NE, nom, job from empwhere job = any (select job from empwhere ND = 10);équivaut à :Select empno, ename, jobfrom emp e1, emp e2where e1.job = e2.joband e2.ND = 10and e1.ND != 10 ;Du bon usageOn choisira toujours la jointure <strong>de</strong> préférence à un select imbriqué pour <strong>de</strong>s questionsd’optimisation.Transformation en select imbriqué dans le fromQuand le select imbriqué porte sur un résultat statistique, on ne peut pas la transformer enjointure.Par contre on peut transformer un select imbriqué dans le where en un select imbriqué dans lefrom.Exemple : tous les employés gagnants plus que la moyenneVersion avec select imbriqué dans le where :Select NE, nom, salfrom empwhere sal > (select avg(sal) from emp);Version avec select imbriqué dans le from :Select NE, nom, sal, moysalfrom emp, (select avg(sal) as moysal from emp) tmoywhere sal > moysal;Cas où la transformation est impossible<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 13/24 - Bertrand LIAUDET


Quand on a un NOT IN ou un NOT EXISTS, si le select imbriqué renvoie plusieurs tuples, onne peut pas transformer la requête imbriquée en jointure artificielle.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 14/24 - Bertrand LIAUDET


5. La notion <strong>de</strong> « Vue »PrésentationUne comman<strong>de</strong> select peut être conservée dans une variable appelée "vue".Une vue est une table virtuelle :• elle n'a pas d'existence physique ;• elle est recalculée à chaque utilisation ;• elle est équivalente à une requête.Création d’une vueLa syntaxe <strong>de</strong> la création d'une vue est la suivante :CREATE VIEW nom_vue ASselect …ouUtilisation d’une vueCREATE or REPLACE VIEW nom_vue ASselect …Une vue s’utilise comme une table.Consultation du co<strong>de</strong> d’une vuemysql> SHOW CREATE VIEW nom_vue;Suppression d’une vueExemplePour supprimer une vue, on écrira :DROP VIEW nom_vue ;Tous les départements contenant au moins un ANALYST (c’est un job) :CREATE or REPLACE VIEW <strong>de</strong>ptAvecAnalyste asSelect distinct nd from empwhere job = 'ANALYST'or<strong>de</strong>r by nd;<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 15/24 - Bertrand LIAUDET


Les 2 usages <strong>de</strong>s vues1 : décomposer les requêtes en sous-requêtesUne vue remplacer n’importe quelle table dans un select.Les vues perm<strong>et</strong>tent <strong>de</strong> décomposer les requêtes en sous-requêtes en enregistrant les sousrequêtes.Le select principal joue le rôle <strong>de</strong> programme principal. Les vues correspondant à <strong>de</strong>s sousrequêtesjoue le rôle <strong>de</strong> fonction (ou <strong>de</strong> procédure).Tous les employés travaillant dans un département qui contient au moins un 'ANALYST' (c'estun métier).On commence par créer la vue correspondant à la requête : « tous les départements contenantau moins un ANALYST (cf. exemple précé<strong>de</strong>nt) :CREATE or REPLACE VIEW <strong>de</strong>ptAvecAnalyste asSelect distinct nd from empwhere job = 'ANALYST'or<strong>de</strong>r by nd;Ensuite on traite la requête principale en exploitant la nouvelle vue : ExempleSelect ne, nom from empwhere nd in (select nd from <strong>de</strong>ptAvecAnalyste);ou :Select distinct e.ne, e.nom from emp e, <strong>de</strong>ptAvecAnalyste dwhere e.nd =d.nd;2 : Faciliter <strong>et</strong> sécuriser l’accès aux données par les utilisateursOn peut créer <strong>de</strong>s vues <strong>et</strong> ne donner <strong>de</strong>s droits d’accès que sur ces vues : ça favorise lasécurisation <strong>et</strong> ça facilite l’accès, les vues étant orientées « usage ».<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 16/24 - Bertrand LIAUDET


6. Opérations ensemblistesPrincipe général <strong>de</strong>s opérations ensemblistesLes opérations ensemblistes s’appliquent à <strong>de</strong>ux tables qui ont les mêmes attributs (où plusprécisément <strong>de</strong>s attributs <strong>de</strong> mêmes types).Les opérations ensemblistes sur ces <strong>de</strong>ux tables consistent soit regrouper tous les tuples(UNION), soit extraire les tuples en commun (INTERSECTION), soit prendre les tuples d'un<strong>et</strong>able qui ne sont pas dans l'autre (DIFFERENCE).Pour que ces opérations soient significatives, il ne suffit pas que les attributs aient le même type,encore faut-il qu'ils aient la même signification. Dans le cas le plus général, ils seront i<strong>de</strong>ntiques.UnionL'union <strong>de</strong> <strong>de</strong>ux tables ayant <strong>de</strong>s attributs <strong>de</strong> mêmes types est une table constituée <strong>de</strong>s attributs<strong>de</strong> la première table <strong>et</strong> <strong>de</strong> tous les tuples <strong>de</strong>s <strong>de</strong>ux tables <strong>de</strong> départ. La syntaxe est la suivante :Select liste_1 d'attributs from table_1unionselect liste_2 d'attributs from table 2;listes d’attributsElles doivent avoir la même forme dans le where du select principal <strong>et</strong> dans la projection duselect imbriqué : même nombre d’attributs <strong>et</strong> même type pour les attributs. Habituellement, cesont les même attributs dans les <strong>de</strong>ux select.tables <strong>de</strong>s selectLes <strong>de</strong>ux tables <strong>de</strong> départ (table_1 <strong>et</strong> table_2) peuvent avoir <strong>de</strong>s attributs différents. Ce sont lestables proj<strong>et</strong>ées qui doivent avoir <strong>de</strong>s attributs <strong>de</strong> mêmes types pour pouvoir être unies.<strong>de</strong>s doublons LesLes éventuels doublons sont éliminés automatiquement par l’UNION, comme par toutes lesopérations ensemblistes.<strong>de</strong>s tuplesLes tuples apparaissent dans l’ordre du premier select suivi par ceux du <strong>de</strong>uxième select.Toutefois, le premier select ne peut pas contenir <strong>de</strong> ORDER BYLesSuppressionOn peut trier le résultat final en m<strong>et</strong>tant un ORDER BY à la fin du <strong>de</strong>uxième select. Ordre<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 17/24 - Bertrand LIAUDET


DifférenceLa différence <strong>de</strong> <strong>de</strong>ux tables ayant <strong>de</strong>s attributs <strong>de</strong> mêmes types est une table constituée <strong>de</strong>sattributs <strong>de</strong> la première table <strong>et</strong> <strong>de</strong>s tuples <strong>de</strong> la première table n'appartenant pas à la <strong>de</strong>uxième :ExempleSelect liste_1 d'attributs from table_1minusselect liste_2 d'attributs from table 2;Tous les numéros <strong>de</strong>s départements vi<strong>de</strong>s <strong>de</strong> la société (c'est-à-dire les numéros <strong>de</strong>s départementsdans lesquels aucun employé ne travaille) :Select <strong>de</strong>ptno from <strong>de</strong>ptminusselect distinct <strong>de</strong>ptno from emp;On soustrait <strong>de</strong> la table <strong>de</strong>s numéros <strong>de</strong> tous les départements la table <strong>de</strong>s numéros <strong>de</strong>sdépartements non vi<strong>de</strong>s (ceux dans lesquels travaille au moins un employé).IntersectionL'intersection <strong>de</strong> <strong>de</strong>ux tables ayant <strong>de</strong>s attributs <strong>de</strong> mêmes types est une table constituée <strong>de</strong>sattributs <strong>de</strong> la première table <strong>et</strong> <strong>de</strong>s tuples <strong>de</strong> la première table appartenant aussi à la <strong>de</strong>uxième :Select liste_1 d'attributs from table_1intersectselect liste_2 d'attributs from table_2;<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 18/24 - Bertrand LIAUDET


Equivalence entre MINUS, INTERSECT <strong>et</strong> les requêtes imbriquées<strong>MySQL</strong> ne propose que l’opérateur UNION.Equivalence entre MINUS <strong>et</strong> NOT INtous les numéros <strong>de</strong>s départements vi<strong>de</strong>s <strong>de</strong> la société (c'est-à-dire les numéros <strong>de</strong>sdépartements dans lesquels aucun employé ne travaille) :Select <strong>de</strong>ptno from <strong>de</strong>ptminusselect distinct <strong>de</strong>ptno from emp;équivaut à :Select ND from <strong>de</strong>ptWhere ND not in (select ND from emp);Equivalence entre INTERSECT <strong>et</strong> INSelect listeAtt1 from table1intersectSelect listeAtt1 from table2équivaut à :Select listeAtt1 from table1Where listeAtt1 in (Select listeAtt1 from table2);<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 19/24 - Bertrand LIAUDET


<strong>TP</strong> N°7 : JOINTURE ARTIFICIELLE, IMBRICATION DESELECT, OPERATIONS ENSEMBLISTESPrésentation<strong>Bases</strong> : « biblio-<strong>07</strong> », « employes-<strong>07</strong> », « ecoling-<strong>07</strong> »• SELECT : répondre aux questions. Requêtes complexes.Métho<strong>de</strong>Travail à faire• Dans un fichier texte à votre nom+<strong>TP</strong><strong>07</strong>.txt, écrire les questions <strong>et</strong> les réponses les unes à lasuite <strong>de</strong>s autres.• Après chaque requête, on m<strong>et</strong>, en commentaire, le nom <strong>de</strong> l’attribut clé primaire <strong>de</strong> la tablerésultat• M<strong>et</strong>tez le résultat obtenu dans le fichier (copier-coller).• Sur papier : faire le graphe <strong>de</strong> la question.Métho<strong>de</strong> <strong>de</strong> travailA partir du fichier texte votreNom<strong>TP</strong>06.txt, faire <strong>de</strong>s copier-coller dans la calcul<strong>et</strong>te SQL oudans utiliser un fichier <strong>de</strong> test avec un source, <strong>et</strong> copier coller la bonne requête dans le rapport<strong>de</strong> <strong>TP</strong>.Ordre <strong>de</strong> projection <strong>de</strong>s attributsRequête sans fonction <strong>de</strong> groupeAttributs <strong>de</strong> tri, Cle Primaire, Clé Significative, Attributs <strong>de</strong>mandés, Attributs <strong>de</strong> restrictionRequête avec fonctions <strong>de</strong> groupeAttributs <strong>de</strong> tri, attributs du group by, fonctions <strong>de</strong> groupe <strong>de</strong>mandées, fonctions <strong>de</strong> groupe <strong>de</strong>restriction (du having).restriction (du having).Exercice 1 : BD employés <strong>et</strong> départements<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 20/24 - Bertrand LIAUDET


PrésentationOn travaillera sur les tables suivantes :EMPLOYES(NE, NOM, JOB, DATEMB, SAL, COMM, #ND, *NEchef)• NE numéro <strong>de</strong> l’employé. Clé primaire.• NOM nom <strong>de</strong> l’employé.• JOB intitulé du poste occupé.• DATEMB date d’embauche.• SAL salaire <strong>de</strong> l’employé.• COMM commission (part <strong>de</strong> salaire variable).• #ND n° du département dans lequel travaille l’employé. Clé étrangère.• *NEchef n° d’employé du chef <strong>de</strong> l’employé. Clé étrangère réflexive.DEPARTEMENTS(ND, NOM, VILLE)• ND numéro <strong>de</strong>s départements <strong>de</strong> l’entreprise. Clé primaire.• NOM nom <strong>de</strong>s départements <strong>de</strong> l’entreprise.• VILE nom <strong>de</strong>s villes où sont situés les départements.Interrogation <strong>de</strong> la BD0. Télécharger le script <strong>de</strong> création <strong>de</strong> la BD : employes.sql <strong>et</strong> lancer ce script <strong>de</strong> création <strong>de</strong> laBD.1. Tous les employés travaillant dans un département qui contient au moins un 'ANALYST'(c'est un métier).Ecrire 3 versions.2. Tous les employés ayant le même job que les employés du département 30.Ecrire 3 versions.3. Tous les noms <strong>et</strong> dates d’embauche <strong>de</strong>s employés embauchés avant BLAKE.Ecrire 3 versions.4. Tous les employés ayant le même chef que ALLENEcrire 3 versions.5. Tous les employés n’ayant pas le même chef que ALLENEcrire 2 versions.6. Changer le nom <strong>de</strong> CLARK (le 7782) <strong>et</strong> passez le à ALLEN.Relancer la requête <strong>de</strong> l’exercice précé<strong>de</strong>nt avec jointure artificielle <strong>et</strong> avec le NOT IN. Queconstatez-vous ?Repassez le 7782 à CLARK.7. Tous les employés n’ayant pas <strong>de</strong> subordonnées.Ecrire 3 versions.8. Tous les départements vi<strong>de</strong>s avec leurs noms <strong>et</strong> villes.Ecrire 3 versions.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 21/24 - Bertrand LIAUDET


9. Tous les employés ayant le même job <strong>et</strong> le même chef que MARTIN.Ecrire 3 versions.10. Tous les employés travaillant à Chicago <strong>et</strong> ayant le même job qu’ALLEN.Ecrire 3 versions.11. Tous les employés du département RESEARCH embauchés la même année que quelqu’undu département SALESEcrire 3 versions.12. Tous les employés embauchés avant tous les employés du département 10.Ecrire 2 versions.Pour vérifier on affichera tous les employés du 10 ordonnés par date d’embauche.13. Tous les employés qui gagnent plus que la moyenne classés par salaire croissant.Ecrire 2 versions.14. Tous les département qui contiennent plus d’employés que le nombre moyen d’employés parville.Faire <strong>de</strong>ux versions imbriqués (avec <strong>et</strong> sans imbrications dans le where)Faire plusieurs versions avec <strong>de</strong>s vues.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 22/24 - Bertrand LIAUDET


Exercice 2 : BD biblioPrésentationOn travaillera sur les tables suivantes :OEUVRES(NO, TITRE, AUTEUR)• NO numéro <strong>de</strong> l’œuvre. Clé primaire.• LIVRE titre <strong>de</strong> l’oeuvre• AUTEUR auteur <strong>de</strong> l’oeuvreADHERENTS(NA, NOM, VILLE)• NA numéro d’adhérent. Clé primaire.• NOM nom <strong>de</strong> l’adhérent.• PRENOM prénom <strong>de</strong> l’adhérent.• ADR adresse <strong>de</strong> l’adhérent.• TEL téléphone <strong>de</strong> l’adhérent.LIVRES (NL, EDITEUR, #NO)• NL numéro du livre. Clé primaire.• EDITEUR éditeur du livre• NO numéro <strong>de</strong> l’oeuvre. Clé étrangère.EMPRUNTER(#NL, DATEMP, DATRETMAX, DATRET, #NA)• #NL numéro <strong>de</strong> livre. Clé primaire. Clé étrangère.• DATEMP date d’emprunt du livre. Clé primaire.• DATRETMAX date limite <strong>de</strong> r<strong>et</strong>our autorisée.• DATRET date <strong>de</strong> r<strong>et</strong>our effectif du livre.• #NA numéro d’adhérent. Clé étrangère.Interrogation <strong>de</strong> la BD0. Utiliser le script corrigé <strong>de</strong> création <strong>de</strong> la BD : Biblio<strong>TP</strong>06.txt1. Combien d’exemplaires du titre : « Narcisse <strong>et</strong> Goldmund » sont disponibles ?On utilisera <strong>de</strong>ux métho<strong>de</strong>s :Une qui vérifie si un exemplaire est sorti ou pas.Une métho<strong>de</strong> qui compte tous les exemplaires <strong>et</strong> les exemplaires sortis.Dans la première métho<strong>de</strong>, on commencera par afficher tous les exemplaires du livre.Puis les exemplaires disponibles<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 23/24 - Bertrand LIAUDET


Et enfin le nombre d’exemplaires disponibles2. Pour le titre « Narcisse <strong>et</strong> Goldmund » afficher le nombre d’exemplaire total, le nombred’exemplaires disponibles <strong>et</strong> le nombre d’exemplaires actuellement empruntés, avec le titre.3. Quelle est la moyenne du nombre <strong>de</strong> livres empruntés par adhérent.4. Refaire la question 2 pour tous les titres sortis au moins une fois.<strong>INSIA</strong> - BASES DE DONNÉES – <strong>ING</strong> 1 – <strong>Cours</strong> <strong>07</strong> - page 24/24 - Bertrand LIAUDET

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!