© Olfa DRIDI Langage d’interrogation des données Préparé par : Mme Olfa DRIDI S
© Olfa DRIDI Langage d’interrogation des données Préparé par : Mme Olfa DRIDI Système de Gestion de Bases de Données © 1. Les jointures 2. Les sous-interrogations Plan 2 © Plusieurs clauses du langage SQL permettent de manipuler simultanément plusieurs tables et d’exprimer des opérations binaires de l’algèbre relationnelle : • Produit cartésien • Jointure • Union • Intersection • Différence Requêtes sur plusieurs tables 3 © Génération d'un Produit Cartésien ENAME DNAME ------ ---------- KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected. EMP (14 lignes) DEPT (4 lignes) EMPNO ENAME ... DEPTNO ------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10 DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON "Produit cartésien : 14*4=56 lignes" © • Une jointure sert à extraire des données de plusieurs tables. • Ecrivez la condition de jointure dans la clause WHERE. • Placez le nom de la table avant le nom de la colonne lorsque celui-ci figure dans plusieurs tables. Qu'est-ce qu'une Jointure ? SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; © En extrayant des données provenant de plusieurs tables, nous devons les joindre. Plusieurs types de jointures sont définis selon la nature de la condition: • une équijointure ou simple jointure ou jointure interne : permet de réaliser une liaison logique entre 2 tables (l’égalité entre la CP d’une table et la CE de l’autre) • une inéquijointure ou thêta jointure : est une jointure dont l’expression du pivot utilise des opérateurs autre que l’égalité(<,>,!=,>=,<=, BETWEEN) • une auto jointure : jointure d’une table à elle-même • une jointure externe : est une jointure qui favorise une table sur une autre Types de jointures 6 © Extraction d'Enregistrements avec les Equijointures SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected. Donner pour chaque employé son nom et son lieu de travail. © • Le rapprochement de chaque ligne de la table emp avec la ligne de la table dept ayant même numéro de département permet d'obtenir la liste des employés avec la localité dans laquelle ils travaillent. • Ce rapprochement entre deux colonnes appartenant à deux tables différentes mais ayant le même sens (ici le numéro de département) et venant vraisemblablement d'une relation 1- n lors de la conception (ici 1 entité département pour n entités employés) est assez naturel. C'est pourquoi ce type de jointure porte le nom de jointure naturelle ou d'équi-jointure. Extraction d'Enregistrements avec les Equijointures 8 © • Préfixer avec le nom de la table pour différencier les noms de colonnes appartenant à plusieurs tables. • Ces préfixes de table améliorent les performances. • Différencier des colonnes de même nom appartenant à plusieurs tables en utilisant des alias de colonne. Différencier les noms de Colonne Ambigus © • Simplifiez les requêtes avec les alias de table. Utilisation d'Alias de Table SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno=d.deptno; © • C’est une jointure dont l’expression du pivot utilise des opérateurs autre que l’égalité (<,>,!=,>=,<=, BETWEEN) Non-Equijointures EMP SALGRADE "Les salaires (SAL) de la table EMP sont compris entre le salaire minimum (LOSAL) et le salaire maximum (HISAL) de la table SALGRADE" EMPNO ENAME SAL ------ ------- ------ 7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected. GRADE LOSAL HISAL ----- ----- ------ 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 © Extraction d'Enregistrements avec les Non-Equijointures ENAME SAL GRADE ---------- --------- --------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected. SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal 4 BETWEEN s.losal AND s.hisal; © • Lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondant dans les autres tables, elle ne satisfait pas au critère d'équi-jointure et donc ne figure pas dans le résultat de la jointure. • Une option permet de faire figurer dans le résultat les lignes satisfaisant la condition d'équi-jointure plus celles n'ayant pas de correspondant. • Cette option s'obtient en accolant (+) au nom de colonne de la table dans laquelle manquent des éléments, dans la condition d'équi-jointure. • Jointures externes 13 © • La jointure externe favorise une table appelé dominante par rapport à l’autre appelé table subordonnée • Les lignes de la table dominante sont affichées même si la condition de jointure n’est pas réalisée • L’opérateur (+) placé après le nom d’une des deux tables indique la table subordonnée(dans laquelle il manque des éléments) Jointures externes 14 SELECT table.column, table.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table.column, table.column FROM table1, table2 WHERE table1.column = table2.column(+); © A Jointures Externes EMP DEPT Pas d'employés dans le département OPERATIONS ENAME DEPTNO ----- ------ KING 10 BLAKE 30 CLARK 10 JONES 20 ... DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH ... 40 OPERATIONS © Utilisation des Jointures Externes SQL> SELECT e.ename, d.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno(+) = d.deptno 4 ORDER BY e.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected. à Le département 40 ne figurait pas dans le résultat du SELECT précédent. Par contre, il figurera dans le résultat du SELECT suivant. © • Retrouver les départements n'ayant aucun employé. Utilisation des Jointures Externes 17 SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d 3 WHERE d.deptno= e.deptno(+) 4 AND e.ename IS NULL; © Auto-jointure: Liaison d'une Table à Elle-même ü L’auto-jointure est utilisée lorsqu’on est emmené à comparer entre les valeurs d’une même colonne d’une même table. ü Il peut être utile de rassembler des informations venant d'une ligne d'une table avec des informations venant d'une autre ligne de la même table. ü Dans ce cas, il faut impérativement renommer au moins l'une des deux occurrences de la table (ici emp) en lui donnant un synonyme, afin de pouvoir préfixer sans ambiguïté chaque nom de colonne. © Auto-jointure: Liaison d'une Table à Elle-même WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------- BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected. SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno; Donner pour chaque employé le nom de son supérieur hiérarchique. © Résumé Equijointure Non-équijointure Jointure externe Autojointure SELECT table.column, table.column FROM table1, table2 WHERE table1.column1 = table2.column2; © • On construit deux requêtes dont les résultats ont même arité (même nombre de colonnes et mêmes types d'attributs), et on les relie par un des mots-clés UNION, INTERSECT ou EXCEPT. • L'union s'effectue grâce à UNION. • L'intersection et la différence s'effectuent respectivement grâce à INTERSECT et EXCEPT. Exemple : Donnez tous les noms de région dans la base. Requête : SQL> SELECT region FROM Station UNION SELECT region FROM Client ; Opérateurs ensemblistes 21 © • Donnez les régions où l'on trouve à la fois des clients et des stations. SQL> SELECT region FROM Station INTERSECT SELECT region FROM Client ; • Quelles sont les régions où l'on trouve des stations mais pas des clients ? SQL> SELECT region FROM Station EXCEPT SELECT region FROM Client ; Opérateurs ensemblistes 22 © • CROSS JOIN : retourne un produit cartésien entre 2 tables • NATURAL JOIN: permet de joindre deux tables selon une colonne qui a le même nom dans les deux tables • JOIN table USING column_name : permet d’exécuter une équijointure sur la même colonne • JOIN table2 ON (table1.column_name=table2.column_name): permet d’exécuter une équijointure sur la condition définit au niveau de la clause ON Syntaxe SQL99 23 © Il y a plusieurs méthodes pour associer 2 tables ensemble. Voici la liste des différentes techniques qui sont utilisées : • INNER JOIN: jointure interne pour retourner les enregistrements quand la condition est vrai dans les 2 tables. C’est l’une des jointures les plus communes. • CROSS JOIN: jointure croisée permettant de faire le produit cartésien de 2 tables. En d’autres mots, permet de joindre chaque lignes d’une table avec chaque lignes d’une seconde table. Attention, le nombre de résultats est en général très élevé. • NATURAL JOIN: jointure naturelle entre 2 tables s’il y a au moins une colonne qui porte le même nom entre les 2 tables SQL Les jointures SQL99 24 © • LEFT JOIN: (ou LEFT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de la table de gauche (LEFT uploads/Industriel/chap5-les-jointures-sous-interrogations-lid 1 .pdf
Documents similaires










-
26
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 22, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 2.4162MB