Afficher des Données Issues de Plusieurs Tables. Copyright Oracle Corporation, Tous droits réservés.

Documents pareils
Le Langage SQL version Oracle

Optimisation SQL. Quelques règles de bases

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le langage SQL Rappels

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Cours: Les Jointures 1

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

SOMMAIRE. Travailler avec les requêtes... 3

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Support de cours «SGBD»

Bases de Données. Plan

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Le Langage De Description De Données(LDD)

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

MODE OPERATOIRE OPENOFFICE BASE

1. Introduction Création d'une requête...2

Langage SQL : créer et interroger une base

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données relationnelles

TP Contraintes - Triggers

1 Introduction et installation

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Introduction aux SGBDR

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

TP 8: LES OPERATEURS ENSEMBLISTES

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Compétences Business Objects

Introduction au Système de Gestion de Base de Données et aux Base de Données

Cours 4. Gestion de la performance. DBA - Maîtrise ASR - Université Evry

INTRODUCTION : Données structurées et accès simplifié

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Université de Nice Sophia-Antipolis. Langage SQL. version 5.7 du polycopié. Richard Grin

Bases de données réparties: Fragmentation et allocation

Mysql. Les requêtes préparées Prepared statements

16H Cours / 18H TD / 20H TP

TD n 10 : Ma première Base de Données

Les bases de données

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

MDI Chèque de Allégroupe Réclamation

INTRODUCTION AU DATA MINING

Utiliser Access ou Excel pour gérer vos données

AGRÉGATION «ÉCONOMIE ET GESTION»

Oracle Décisionnel : Modèle OLAP et Vue matérialisée D BILEK

Réseau : Interconnexion de réseaux, routage et application de règles de filtrage.

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

MySQL / SQL EXEMPLES

GUIDE D UTILISATION DE L ISU SEPTEMBRE 2013 GUIDE D UTILISATION DU NAVIGATEUR UIS.STAT (VERSION BÊTA)

OASIS Date de publication

SAP BusinessObjects Web Intelligence (WebI) BI 4

Création de Sous-Formulaires

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Cours 1 : introduction

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Cours Base de données relationnelles. M. Boughanem, IUP STRI

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Chapitre 10. Architectures des systèmes de gestion de bases de données

- ORS - Optimisation de Requêtes SQL sous Oracle

v7.1 SP2 Guide des Nouveautés

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Tutoriel - flux de facturation

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

Méthodologies de développement de logiciels de gestion

données en connaissance et en actions?

SUPPORT DE COURS ACCESS 2010

Cours admin 200x serveur : DNS et Netbios

1 - Clients 2 - Devis 3 - Commandes 4 - Livraisons 5 - Factures 6 - Avoirs 7 - Modèles

Créer le schéma relationnel d une base de données ACCESS

Bases de Données relationnelles et leurs systèmes de Gestion

Créer une base de données

EXCEL PERFECTIONNEMENT CALCULS AVANCES

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

A. Définition et formalisme

Le chiffre est le signe, le nombre est la valeur.

Guide de démarrage rapide

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Les bases de données Page 1 / 8

I. MySQL : Serveur et SGBD

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

UML et les Bases de Données

Introduction : présentation de la Business Intelligence

CHAPITRE VIII : Les circuits avec résistances ohmiques

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

SQL MAP. Etude d un logiciel SQL Injection

A QUOI SERVENT LES BASES DE DONNÉES?

Intégrité des données

TP3 : Creation de tables 1 seance

Transcription:

4 Afficher des Données Issues de Plusieurs Tables Copyright Oracle Corporation, 1998. Tous droits réservés.

Objectifs 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 4-2 Copyright Oracle Corporation, 1998. Tous droits réservés. Objectifs Au cours de ce chapitre, vous allez étudier les différentes façons d'obtenir des données de plusieurs tables. Le Langage SQL et l Outil SQL*Plus 4-2

Afficher des Données Issues de Plusieurs Tables EMP EMPNO ENAME DEPTNO ------ ----- ------ 7839 KING 10 7698 BLAKE 30 7934 MILLER 10 DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 40 OPERATIONS BOSTON 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. 4-3 Copyright Oracle Corporation, 1998. Tous droits réservés. Afficher des Données Issues de Plusieurs Tables On a parfois besoin d'obtenir des données de plusieurs tables. Dans l'exemple cidessus, 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. Le Langage SQL et l Outil SQL*Plus 4-3

Qu'est-ce qu'une Jointure? Une jointure sert à extraire des données de plusieurs tables. SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2; 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. 4-4 Copyright Oracle Corporation, 1998. Tous droits réservés. 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." Le Langage SQL et l Outil SQL*Plus 4-4

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. 4-5 Copyright Oracle Corporation, 1998. Tous droits réservés. 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. Le Langage SQL et l Outil SQL*Plus 4-5

Génération d'un Produit Cartésien EMP (14 lignes) EMPNO ENAME DEPTNO ------ ----- ------ 7839 KING 10 7698 BLAKE 30 7934 MILLER 10 DEPT (4 lignes) DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 40 OPERATIONS BOSTON "Produit cartésien : 14*4=56 lignes" ENAME DNAME ------ ---------- KING ACCOUNTING BLAKE ACCOUNTING KING RESEARCH BLAKE RESEARCH 56 rows selected. 4-6 Copyright Oracle Corporation, 1998. Tous droits réservés. 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. 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-6

Types de Jointures Equijointure Non-équijointure Jointure externe Autojointure 4-7 Copyright Oracle Corporation, 1998. Tous droits réservés. 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 Le Langage SQL et l Outil SQL*Plus 4-7

Qu'est-ce qu'une Equijointure? EMP 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. DEPT DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 20 RESEARCH DALLAS 20 RESEARCH DALLAS 14 rows selected. Clé étrangèrere Clé primaire 4-8 Copyright Oracle Corporation, 1998. Tous droits réservés. 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. Le Langage SQL et l Outil SQL*Plus 4-8

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. 4-9 Copyright Oracle Corporation, 1998. Tous droits réservés. 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é. Le Langage SQL et l Outil SQL*Plus 4-9

Différencier les Noms de Colonne Ambigus 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. 4-10 Copyright Oracle Corporation, 1998. Tous droits réservés. 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. Le Langage SQL et l Outil SQL*Plus 4-10

Ajout de Conditions de Recherche avec l'opérateur AND EMP 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. DEPT DEPTNO DNAME LOC ------ --------- -------- 10 ACCOUNTING NEW YORK 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 20 RESEARCH DALLAS 20 RESEARCH DALLAS 14 rows selected. 4-11 Copyright Oracle Corporation, 1998. Tous droits réservés. Conditions de Recherche Supplémentaires Outre la jointure, vous pouvez spécifier des critères supplémentaires dans la clause WHERE. Par exemple, pour afficher le matricule, le nom, le numéro de département et la localisation de l'employé King, vous devez ajouter une condition dans la clause WHERE. SQL> SELECT empno, ename, emp.deptno, loc 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno 4 AND INITCAP(ename) = 'King'; EMPNO ENAME DEPTNO LOC --------- ---------- --------- ------------- 7839 KING 10 NEW YORK Le Langage SQL et l Outil SQL*Plus 4-11

Utilisation d'alias de Table Simplifiez les requêtes avec les 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; 4-12 Copyright Oracle Corporation, 1998. Tous droits réservés. Alias de Table La qualification des noms de colonne à l'aide des noms de table peut prendre beaucoup de temps, en particulier si les noms de table sont longs. Vous pouvez substituer des alias de table aux noms de table. De la même manière qu'un alias de colonne renomme une colonne, un alias de table donne un nouveau nom à une table. Les alias de table permettent ainsi de réduire le volume du code SQL et donc, de gagner de la place en mémoire. Notez la manière dont les alias de table sont identifiés dans la clause FROM de l'exemple. Le nom de la table spécifié en entier est suivi d'un espace puis de l'alias de table. E est l'alias de la table EMP, et D l'alias de la table DEPT. Conseils Bien qu'un alias de table puisse compter jusqu'à 30 caractères, il est préférable qu'il soit le plus court possible. Lorsqu'un alias de table est substitué à un nom de table dans la clause FROM, cette substitution doit s'opérer dans la totalité de l'ordre SELECT. Choisissez de préférence des alias "parlants". Un alias de table ne s'applique que dans l'ordre SELECT courant. Le Langage SQL et l Outil SQL*Plus 4-12

Jointures de Plus de Deux Tables CUSTOMER NAME CUSTID ----------- ------ JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 9 rows selected. ORD CUSTID ORDID ------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605 21 rows selected. ITEM ORDID ITEMID ------ ------- 610 3 611 1 612 1 601 1 602 1 64 rows selected. 4-13 Copyright Oracle Corporation, 1998. Tous droits réservés. Jointures Mettant en Jeu Plus de Deux Tables Vous pouvez avoir besoin de lier plus de deux tables. Par exemple, si vous souhaitez afficher le nom, les commandes passées, les numéros d'articles, le total par article et le total par commande pour le client TKB SPORT SHOP, vous devez lier les tables CUSTOMER, ORD et ITEM. SQL> SELECT c.name, o.ordid, i.itemid, i.itemtot, o.total 2 FROM customer c, ord o, item i 3 WHERE c.custid = o.custid 4 AND o.ordid = i.ordid 5 AND c.name = 'TKB SPORT SHOP'; NAME ORDID ITEMID ITEMTOT TOTAL ------------ --------- --------- --------- --------- TKB SPORT SHOP 610 3 58 101.4 TKB SPORT SHOP 610 1 35 101.4 TKB SPORT SHOP 610 2 8.4 101.4 Le Langage SQL et l Outil SQL*Plus 4-13

Non-Equijointures EMP 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. SALGRADE GRADE LOSAL HISAL ----- ----- ------ 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 "Les salaires (SAL) de la table EMP sont compris entre le salaire minimum (LOSAL) et le salaire maximum (HISAL) de la table SALGRADE" 4-14 Copyright Oracle Corporation, 1998. Tous droits réservés. Non-Equijointures La relation entre la table EMP et la table SALGRADE est une non-équijointure car aucune colonne de la table EMP ne correspond directement à une colonne de la table SALGRADE. La relation existant entre les deux tables est la suivante: les valeurs de la colonne SAL de la table EMP sont comprises entre celles des colonnes LOSAL et HISAL de la table SALGRADE. Il faut donc utiliser un autre opérateur que le signe égal (=) pour effectuer une jointure. Le Langage SQL et l Outil SQL*Plus 4-14

Extraction d'enregistrements avec les Non-Equijointures 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; ENAME SAL GRADE ---------- --------- --------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1 14 rows selected. 4-15 Copyright Oracle Corporation, 1998. Tous droits réservés. Non-Equijointures (suite) L'exemple ci-dessus crée une non-équijointure pour évaluer l'échelon de salaire d'un employé. Le salaire est obligatoirement compris entre deux valeurs délimitant une tranche salariale. Il est important de noter que tous les employés n'apparaissent qu'une seule fois dans la liste lorsque la requête est exécutée, et ce pour deux raisons : Aucune ligne de la table des échelons de salaire ne déborde sur une autre. Autrement dit, le salaire d'un employé se situe nécessairement entre la valeur minimale et la valeur maximale d'une des lignes de la table. Tous les salaires des employés entrent dans les limites prévues par la table des échelons de salaire. Aucun employé ne peut gagner moins que le salaire minimal de la colonne LOSAL ni plus que le salaire maximal de la colonne HISAL. Remarque : il serait possible d'utiliser d'autres opérateurs tels que <= et >=, mais BETWEEN est le plus simple. Avec BETWEEN, n'oubliez pas de spécifier d'abord la valeur la plus basse puis la valeur la plus haute. Dans l'exemple, des alias de table ont été spécifiés pour améliorer les performances et non à cause d'une possible ambiguïté. Le Langage SQL et l Outil SQL*Plus 4-15

Jointures Externes EMP ENAME DEPTNO ----- ------ KING 10 BLAKE 30 CLARK 10 JONES 20 DEPT DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH 40 OPERATIONS Pas d'employés s dans le département OPERATIONS 4-16 Copyright Oracle Corporation, 1998. Tous droits réservés. Affichage d'enregistrements sans Lien Direct, au moyen de Jointures Externes Lorsqu'une ligne ne satisfait pas à une condition de jointure, elle n'apparaît pas dans le résultat de la requête. Par exemple, quand on fait l'équijointure entre les tables EMP et DEPT, le département OPERATIONS n'apparaît pas car personne ne travaille dans ce département. SQL> SELECT e.ename, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING JONES 20 RESEARCH ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES 14 rows selected. Le Langage SQL et l Outil SQL*Plus 4-16

Jointures Externes Les jointures externes permettent de visualiser des lignes qui ne répondent pas à la condition de jointure. L'opérateur de jointure externe est le signe (+). 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(+); 4-17 Copyright Oracle Corporation, 1998. Tous droits réservés. Affichage d'enregistrements sans Lien Direct, au moyen de Jointures Externes Il est néanmoins possible de ramener la ou les lignes manquantes en plaçant un opérateur de jointure externe dans la condition de jointure. Cet opérateur se présente sous la forme d'un signe plus inclus entre parenthèses, et se place du "côté" de la jointure où l'information est incomplète. Il crée une ou plusieurs lignes NULL, auxquelles une ou plusieurs lignes de la table complète peuvent être liées. Syntaxe : table1.column = condition qui joint (ou lie) les tables entre-elles. table2.column (+) symbole de jointure externe ; se place d'un côté ou de l'autre de la condition de la clause WHERE, jamais des deux côtés. Placez le symbole de jointure externe après le nom de la colonne appartenant à la table où manquent les lignes correspondantes Le Langage SQL et l Outil SQL*Plus 4-17

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. 4-18 Copyright Oracle Corporation, 1998. Tous droits réservés. Affichage d'enregistrements sans Lien Direct, au moyen de Jointures Externes L'exemple ci-dessus affiche les numéros et les noms de tous les départements. Le département OPERATIONS, qui ne comprend aucun employé, est également affiché. Restrictions Applicables aux Jointures Externes L'opérateur de jointure externe ne peut être placé que d'un seul côté de l'expression, à savoir le côté où l'information manque. Il permet de ramener les lignes d'une table n'ayant pas de jointure directe avec l'autre table. Une condition comportant une jointure externe ne peut pas utiliser l'opérateur IN ni être liée à une autre condition par l'opérateur OR. Le Langage SQL et l Outil SQL*Plus 4-18

Autojointures EMP (WORKER) EMPNO ENAME MGR ----- ------ ---- 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7566 JONES 7839 7654 MARTIN 7698 7499 ALLEN 7698 EMP (MANAGER) EMPNO ENAME ----- -------- 7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE "Dans la table WORKER, MGR équivaut à EMPNO dans la table MANAGER" 4-19 Copyright Oracle Corporation, 1998. Tous droits réservés. Liaison d'une Table à Elle-même Il se peut que vous ayez besoin de relier une table à elle-même. Ici, pour retrouver le nom du manager de chaque employé, il faut que la table EMP soit reliée à elle-même. Par exemple, pour retrouver le nom du manager de l'employé Blake, vous devez : Trouver Blake dans la table EMP en cherchant dans la colonne ENAME Trouver le matricule du manager de Blake en cherchant dans la colonne MGR. Trouver le nom du manager dont le matricule est 7839 dans la colonne EMPNO, puis regarder le nom correspondant dans la colonne ENAME. Le matricule 7839 appartient à King, donc King est le manager de Blake. Dans ce processus, vous utilisez la même table deux fois : la première, pour rechercher le nom de Blake dans la colonne ENAME et la valeur correspondante dans la colonne MRG ; la seconde, pour rechercher le matricule 7839 dans la colonne EMPNO et le nom correspondant (King) dans la colonne ENAME. Le Langage SQL et l Outil SQL*Plus 4-19

Liaison d'une Table à Elle-même SQL> SELECT worker.ename ' works for ' manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno; WORKER.ENAME 'WORKSFOR' MANAG ------------------------------- BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE 13 rows selected. 4-20 Copyright Oracle Corporation, 1998. Tous droits réservés. Liaison d'une Table à Elle-même (suite) L'exemple ci-dessus relie la table EMP à elle-même. Afin de simuler l'existence de deux tables dans la clause FROM, on a mis deux alias, WORKER et MANAGER, pour la même table EMP. Dans cet exemple, la clause WHERE contient une jointure dont la signification est "lorsque le matricule du manager d'un employé correspond au matricule du manager". Le Langage SQL et l Outil SQL*Plus 4-20

Résumé SELECT FROM WHERE table.column, table.column table1, table2 table1.column1 = table2.column2; Equijointure Jointure externe Non-équijointure Autojointure 4-21 Copyright Oracle Corporation, 1998. Tous droits réservés. Résumé Il existe de nombreuses manières de lier des tables. Cependant, toutes sont fondées sur une condition spécifiée dans la clause WHERE. La méthode que vous choisirez dépend du résultat souhaité et des structures de données que vous utilisez. SELECT table.column, table.column FROM table1, table2 WHERE table1.column1 = table2.column2; Types de Jointures Equijointure Non-équijointure Jointure externe Autojointure Produits Cartésiens L'omission de la condition de jointure dans la clause WHERE génère un produit cartésien dans lequel toutes les combinaisons de lignes sont affichées. Alias de Table Les alias de table accélèrent l'accès aux données. Les alias de table permettent de réduire le volume du code et donc, de gagner de la place en mémoire. Le Langage SQL et l Outil SQL*Plus 4-21

Présentation des Exercices Liaison de tables au moyen d'équijointures Exécution de jointures externes et d'autojointures Ajout de conditions supplémentaires 4-22 Copyright Oracle Corporation, 1998. Tous droits réservés. Présentation des Exercices Les exercices qui suivent ont pour but de vous entraîner à extraire des données provenant de plusieurs tables. Ils vont vous demander de lier et de sélectionner des lignes dans la clause WHERE. Le Langage SQL et l Outil SQL*Plus 4-22