M.Hanoune 4 4 Afficher des Données Issues de Plusieurs Tables Le Langage SQL et

M.Hanoune 4 4 Afficher des Données Issues de Plusieurs Tables Le Langage SQL et l’Outil SQL*Plus 4-2 Objectifs Au cours de ce chapitre, vous allez étudier les différentes façons d'obtenir des données de plusieurs tables. 4-2 M.Hanoune Objectifs A la fin de ce chapitre, vous saurez : A la fin de ce chapitre, vous saurez : • Ecrire des ordres SELECT pour accéder aux données de plusieurs tables en utilisant des équijointures et des non- équijointures • Visualiser des données ne répondant pas aux conditions de jointure, en utilisant les jointures externes • Relier une table à elle-même Le Langage SQL et l’Outil SQL*Plus 4-3 Afficher des Données Issues de Plusieurs Tables On a parfois besoin d'obtenir des données de plusieurs tables. Dans l'exemple ci-dessus, l'état affiche les données de deux tables différentes. • EMPNO appartient à la table EMP. • DEPTNO appartient aux tables EMP et DEPT. • LOC appartient à la table DEPT. Pour obtenir cet état, il faut relier les tables EMP et DEPT et accéder aux données de ces deux tables. 4-3 M.Hanoune EMPNO DEPTNO LOC ----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected. Afficher des Données Issues de Plusieurs Tables EMP EMP DEPT DEPT 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 Le Langage SQL et l’Outil SQL*Plus 4-4 Définition des Jointures Pour obtenir des données appartenant à différentes tables de la base de données, vous devez utiliser une condition de jointure. Les lignes d'une table peuvent être reliées aux lignes d'une autre table en fonction de valeurs communes éxistant dans des colonnes se correspondant, en général la colonne clé primaire et la colonne clé étrangère. Pour afficher les données issues de deux ou plusieurs tables , écrivez une condition de jointure simple dans la clause WHERE. Syntaxe : table.column indique la table et la colonne d'où sont extraites les données table1.column1 = table2.column2 représente la condition qui joint (ou lie) les tables entre-elles Conseils • Lorque vous écrivez un ordre SELECT pour joindre des tables, il est recommandé, par souci de clarté et de facilité d'accès, de placer le nom de la table avant le nom de la colonne. • Lorsque le même nom de colonne apparaît dans plusieurs tables, il doit obligatoirement être préfixé par le nom de la table. • Pour joindre n tables entre elles, il faut au minimum (n-1) conditions de jointure. C'est pourquoi, par exemple, trois jointures au moins sont nécessaires pour lier quatre tables. Cette règle ne s'applique pas si votre table contient une clé primaire concaténée, auquel cas il faut plus d'une colonne pour permettre d'identifier chaque ligne de manière unique. Pour plus d'information, reportez-vous à Oracle8 Server SQL Language Reference Manual, "SELECT." 4-4 M.Hanoune Qu'est-ce qu'une Jointure ? Une jointure sert Une jointure sert à à extraire des donn extraire des donné ées de es de plusieurs tables. 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. SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; Le Langage SQL et l’Outil SQL*Plus 4-5 Produit Cartésien Lorsqu'une condition de jointure est incorrecte ou tout simplement omise, on obtient un produit cartésien dans lequel sont affichées toutes les combinaisons de lignes. Toutes les lignes de la première table sont jointes à toutes les lignes de la seconde. Un produit cartésien fournit en général un nombre important de lignes, donnant un résultat rarement exploitable. C'est pourquoi il faut toujours inclure une condition de jointure correcte dans une clause WHERE, à moins que vous n'ayez réellement besoin de combiner toutes les lignes de toutes les tables. 4-5 M.Hanoune Produit Cartésien • On obtient un produit cartésien lorsque : – Une condition de jointure est omise – Une condition de jointure est incorrecte • Toutes les lignes de la première table sont jointes à toutes les lignes de la seconde • Pour éviter un produit cartésien, toujours insérer une condition de jointure correcte dans la clause WHERE. Le Langage SQL et l’Outil SQL*Plus 4-6 Produit Cartésien L'omission d'une condition de jointure génère un produit cartésien. L'exemple de la diapositive affiche le nom d'employé et le nom de département des tables EMP et DEPT. Comme aucune clause WHERE n'a été spécifiée, toutes les lignes (14) de la table EMP ont été jointes à l'ensemble des lignes (4) de la table DEPT, donnant ainsi un résultat de 56 lignes. 4-6 M.Hanoune Génération d'un Produit Cartésien ENAME DNAME ------ ---------- KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected. EMP (14 lignes) EMP (14 lignes) DEPT (4 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 "Produit cart carté ésien : sien : 14*4=56 lignes" 14*4=56 lignes" SQL> SELECT ename, dname 2 FROM emp, dept; ENAME DNAME ---------- -------------- KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected. Le Langage SQL et l’Outil SQL*Plus 4-7 Types de Jointures Il existe deux principaux types de conditions de jointure : • Les équijointures • Les non-équijointures Les autres méthodes de jointures sont les suivantes : • Jointures externes • Autojointures • Les opérateurs ensemblistes Remarque : les opérateurs ensemblistes seront étudiés dans un chapitre ultérieur 4-7 M.Hanoune Types de Jointures Equijointure Non-équijointure Jointure externe Autojointure Le Langage SQL et l’Outil SQL*Plus 4-8 Equijointures Pour déterminer le département auquel appartient un employé, vous devez comparer les valeurs de la colonne DEPTNO de la table EMP avec les valeurs de la colonne DEPTNO de la table DEPT. La relation établie entre les tables EMP et DEPT est une équijointure : les valeurs de la colonne DEPTNO appartenant aux deux tables doivent être identiques. Ce type de relation fait souvent appel aux clés primaires et étrangères. Remarque : les équijointures sont aussi appelées jointures simples ou jointures internes. 4-8 M.Hanoune Qu'est-ce qu'une Equijointure ? EMP EMP DEPT DEPT EMPNO ENAME DEPTNO ------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected. DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS ... 14 rows selected. Cl Clé é é étrang trangè ère re Cl Clé é primaire primaire Le Langage SQL et l’Outil SQL*Plus 4-9 Extraction d'Enregistrements avec les Equijointures Dans l'exemple ci-dessus : • La clause SELECT spécifie les noms des colonnes à extraire : – colonnes ename (nom des employés), empno (matricule des employés) et deptno (numéro de département) dans la table EMP – colonnes deptno (numéro de département) et loc (localisation) dans la table DEPT • La clause FROM spécifie les deux tables de la base de données auxquelles on souhaite accéder : – la table EMP – la table DEPT • La clause WHERE spécifie la façon dont les deux tables sont jointes : EMP.DEPTNO=DEPT.DEPTNO La colonne DEPTNO étant commune aux deux tables, vous devez la préfixer du nom de la table d'appartenance afin d'éviter toute ambiguïté. 4-9 M.Hanoune 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. Le Langage SQL et l’Outil SQL*Plus 4-10 Différenciation des Noms de Colonne Pour éviter toute ambiguïté, vous devez préfixer dans la clause WHERE les noms de colonne avec le nom de la table. Ainsi, sans autre précision, la colonne DEPTNO peut tout aussi bien appartenir à la table DEPT qu'à la table EMP. Il faut donc ajouter le préfixe de table pour pouvoir exécuter la requête. Lorsqu'aucune colonne n'est commune aux deux tables, la qualification n'est pas indispensable. Toutefois, vous obtiendrez de meilleurs résultats avec les préfixes de table, car ils indiquent précisément à Oracle où il peut trouver les colonnes. La nécessité de qualifier les noms de colonne s'applique aussi quand une colonne ambiguë est présente dans d'autres clauses, par exemple dans les clauses SELECT ou ORDER BY. 4-10 M.Hanoune Différencier les Noms de Colonne Ambigus • Préfixer avec le nom de la table pour différencier les noms de colonnes uploads/Industriel/04-affichdonnplustabl.pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager