SlideShare une entreprise Scribd logo
1  sur  11
Télécharger pour lire hors ligne
1




                                                 SQL Server 2000


                                                        Les jointures
28 JANVIER 2008                                                                                          CHAPITRE 1




                     Les jointures sont un moyen en Transact-SQL pour récupérer des informations
                     provenant de plusieurs objets distincts, qu’il s’agisse de tables, tables temporaires ou
                     vues en utilisant si, possible, leurs clefs primaires et étrangères.

                     SQL Server comprend deux types de syntaxe pour respecter une compatibilité
                     ascendante :

                     -   Le standard ANSI SQL 89 utilisé sur les SGBD SQL Server 6.5 et 7

                     -   Le standard ANSI SQL 92 exploité réellement à partir de la version 2000 de SQL
                         Server



                     Il existe différents types de jointures, chacune répondant à des besoins précis :
                                                                 莽莽   诲睢 睦 睨 睨




                     -   Les jointures internes,

                     -   Les jointures externes,

                     -   Les jointures multiples,

                     -   L’auto-jointure.




                  Constitution des tables d’exemple

                  Si la base Northwind fournit un certain nombre d’objets intéressants, de nouvelles tables sont
                  nécessaires pour illustrer au mieux les différents cas de jointures.

                  Imaginons le cas d’une société possédant plusieurs départements dont un dédié aux ressources
                  humaines. Pour la gestion du personnel, les informations seront stockées dans les tables suivantes :

                     -   Département,

                     -   Emploi,

                     -   Personnel,

                     -   Client.




  Daniel Muller                                    1 – SQL Server 2000 : les jointures                       Version 1.1
2




                Création des tables :



                CREATE TABLE Departement
                (
                Id_departement INT NOT NULL CONSTRAINT pk_id_departement PRIMARY KEY,
                Nom_departement VARCHAR (128) NOT NULL
                )




                CREATE TABLE Emploi
                (
                Id_emploi INT NOT NULL CONSTRAINT pk_id_emploi PRIMARY KEY,
                Description_emploi VARCHAR (128) NOT NULL
                )



                CREATE TABLE Personnel
                Id_personnel INT NOT NULL CONSTRAINT pk_id_personnel PRIMARY KEY,
                Nom_personnel VARCHAR (64) NOT NULL,
                Departement_fk INT NULL CONSTRAINT fk_departement_fk REFERENCES Departement
                (Id_departement),
                Emploi_fk INT NOT NULL CONSTRAINT fk_emploi_fk REFERENCES Emploi (Id_emploi),
                Salaire DEC (7,2) NOT NULL
                )


                CREATE TABLE Client
                (
                Id_client INT NOT NULL CONSTRAINT pk_id_client PRIMARY KEY,
                Nom_client VARCHAR (128) NOT NULL,
                Client_ref CHAR (1) NOT NULL CONSTRAINT chk_client_ref CHECK (Client_Ref IN ('O','N'))
                )


                CREATE TABLE Hierarchie (
                Id_Hierarchie INT NOT NULL CONSTRAINT pk_id_hierarchie PRIMARY KEY,
                Nom VARCHAR (64) NOT NULL,
                Prenom VARCHAR (64) NOT NULL,
                Responsable_Fk INT NULL CONSTRAINT responsable_fk REFERENCES Hierarchie
                (Id_Hierarchie),
                )



                Insertion des données :



                INSERT   INTO   Departement   VALUES     (100,   'Ingénierie')
                INSERT   INTO   Departement   VALUES     (200,   'Production')
                INSERT   INTO   Departement   VALUES     (300,   'Comptabilité')
                INSERT   INTO   Departement   VALUES     (400,   'Direction')
                INSERT   INTO   Departement   VALUES     (500,   'Partenariat')


                INSERT   INTO   Emploi   VALUES   (10,   'Informaticien')
                INSERT   INTO   Emploi   VALUES   (20,   'Technicien')
                INSERT   INTO   Emploi   VALUES   (30,   'Expert Comptable')
                INSERT   INTO   Emploi   VALUES   (40,   'Directeur')
                INSERT   INTO   Emploi   VALUES   (50,   'Manager')


Daniel Muller                                       1 – SQL Server 2000 : les jointures         Version 1.1
3




                INSERT   INTO   Personnel    VALUES     (1,    'Paul Kaiser', 100, 10, 2700.00)
                INSERT   INTO   Personnel    VALUES     (2,    'Angela Mitchell', 300, 30, 4200.00)
                INSERT   INTO   Personnel    VALUES     (3,    'Alain Maurison', 200, 20, 1480.00)
                INSERT   INTO   Personnel    VALUES     (4,    'Isabelle Tcheky', 400, 40, 5700.00)
                INSERT   INTO   Personnel    VALUES     (5,    'Gilbert Menon', 400, 50, 5300.00)
                INSERT   INTO   Personnel    VALUES     (6,    'Jean Picard', NULL, 20, 1510.00)


                INSERT   INTO   Client   VALUES   (1,    'SOMATRA', 'O')
                INSERT   INTO   Client   VALUES   (2,    'USINOR', 'N')
                INSERT   INTO   Client   VALUES   (3,    'PLASTEX', 'O')
                INSERT   INTO   Client   VALUES   (4,    'GONDRAND & FILS', 'O')
                INSERT   INTO   Client   VALUES   (5,    'CASPER ET FRERES', 'N')


                INSERT   INTO   Hierarchie     VALUES    (1,    ‘Thenan’, ' Gérard', NULL)
                INSERT   INTO   Hierarchie     VALUES    (2,    ‘Michel’, 'Louise',1)
                INSERT   INTO   Hierarchie     VALUES    (3,    ‘Keil’, ‘Paul’, 2)
                INSERT   INTO   Hierarchie     VALUES    (4,    ‘Pelon’, ‘Géraldine’, 2)
                INSERT   INTO   Hierarchie     VALUES    (5,    ‘Matserki’, ‘Luc’, 4)




                Relations entre les tables :




                La table ‘Personnel’ est liée aux tables ‘Emploi’ et ‘Departement’ par deux clés étrangères.




                Rappel : Ecriture d’une clause ‘SELECT’


                Une clause ‘SELECT’ s’écrit de la manière suivante :




Daniel Muller                                         1 – SQL Server 2000 : les jointures                      Version 1.1
4




                SELECT ‘Liste des colonnes’

                FROM    Table

                WHERE “Condition”

                GROUP BY “Liste des colonnes”

                HAVING “Condition”

                ORDER BY “Liste des colonnes” (« DESC »| « ASC »)




                Jointure Interne

                Une jointure interne lie deux tables par une condition d’égalité et ne retournent que les informations
                conformes à cette condition. Cette égalité porte de préférence sur les liens établis entre les deux
                tables, soit la clé primaire de la première table et la clé étrangère de la seconde table.



                Syntaxe SQL-89 :

                SELECT ‘Liste des colonnes’

                FROM Table1 AS T1,

                       Table2 AS T2

                WHERE T1. ‘Clé primaire’ = T2. ‘Clé étrangère’



                Syntaxe SQL-92 :

                SELECT ‘Liste des colonnes’

                FROM Table1 AS T1 INNER JOIN Table2 AS T2 ON T1. ‘Clé primaire’ = T2. ‘Clé étrangère’

                WHERE ‘Condition’



                Exemple :

                On souhaite afficher la liste des salariés ainsi que leur département respectifs. Pour cela, les tables
                ‘Personnel’ et ‘Departement’ vont être utilisées.



                Résultat :

                Nom_personnel            Nom_departement
                Paul Kaiser              Ingénieurie
                Angela Mitchell          Comptabilité
                Alain Maurison           Production
                Isabelle Tcheky          Direction
                Gilbert Menon            Direction




Daniel Muller                                           1 – SQL Server 2000 : les jointures                  Version 1.1
5


                Syntaxe SQL-89 :

                SELECT      P.Nom_personnel,
                            D.Nom_departement
                FROM        Departement AS D,
                            Personnel AS P
                WHERE       D.Id_departement = P.Departement_fk



                Syntaxe SQL-92:

                SELECT P.Nom_personnel,
                       D.Nom_departement
                FROM   Departement AS D
                       INNER JOIN Personnel AS P ON D.Id_departement = P.departement_fk




                Remarque :

                    -    La clause ‘INNER JOIN’ ne prend en compte que les informations répondant à la condition de
                         jointure. Aussi, les informations qui n’ont pas de liens n’apparaissent dans le résultat final :

                             o    Jean Picard n’a pas de département attitré.

                             o    Le département ‘Partenariat’ ne compte aucun employé.

                    -    Il est possible de simplifier l’écriture de la requête en supprimant la clause ‘INNER’ car la
                         jointure interne est le fonctionnement par défaut du moteur SQL.




                Jointure Externe

                Une jointure externe permet de retourner les lignes répondant à la condition de jointure mais aussi
                toutes celles de la première table, de la seconde table ou des deux qui ne vérifient pas la jointure.

                Pour cela, trois expressions sont possibles :



                    -    L’expression LEFT OUTER JOIN retourne toutes les lignes répondant à la condition de
                         jointure et celles de la table appelée par la clause FROM qui n’y répondent pas.



                    Syntaxe SQL-89 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1,

                           Table2 AS T2

                    WHERE T1. ‘clé primaire’ *= T2. ‘clé étrangère’




Daniel Muller                                          1 – SQL Server 2000 : les jointures                     Version 1.1
6


                    Syntaxe SQL-92 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’



                    -   L’expression RIGHT OUTER JOIN retourne toutes les lignes vérifiant la condition de jointure
                        et toutes celles de la table appelée par la clause JOIN qui n’y répondent pas.



                    Syntaxe SQL-89 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1,

                           Table2 AS T2

                    WHERE T1. ‘clé primaire’ =* T2. ‘clé étrangère’




                    Syntaxe SQL-92 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1 RIGHT OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’



                    -   L’expression FULL OUTER JOIN retourne toutes les lignes correspondant à la condition de
                        jointure mais affiche également toutes les lignes des deux tables utilisées dans la requête.



                    Syntaxe SQL-89 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1,

                           Table2 AS T2

                    WHERE T1. ‘clé primaire’ *=* T2. ‘clé étrangère’



                    Syntaxe SQL-92 :

                    SELECT ‘Liste des colonnes’

                    FROM    Table1 AS T1 FULL OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’



                Cette dernière jointure est généralement à éviter vu le nombre de lignes qu’elle peut retourner.




                Pour illustrer les différents cas de jointure externes, nous allons nous inspirer de l’exemple précédent.




Daniel Muller                                          1 – SQL Server 2000 : les jointures                           Version 1.1
7


                Exemple : jointure externe gauche



                Syntaxe SQL-92 :

                SELECT P.Nom_personnel,
                       D.Nom_departement
                FROM   Departement AS D
                       LEFT OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk



                Résultat :

                Nom_personnel        Nom_departement
                Paul Kaiser          Ingénieurie
                Alain Maurison       Production
                Angela Mitchell      Comptabilité
                Isabelle Tcheky      Direction
                Gilbert Menon        Direction
                NULL                 Partenariat

                Cette requête va afficher tout d’abord toutes les lignes répondant à la condition de jointure puis celles
                de la table ‘Departement’ qui n’ont pas de correspondance avec la table ‘Personnel’.

                Exemple : jointure externe droite



                Syntaxe SQL-92 :


                SELECT P.Nom_personnel,
                       D.Nom_departement
                FROM   Departement AS D
                       RIGHT OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk


                Résultat :

                Nom_personnel        Nom_departement
                Paul Kaiser          Ingénieurie
                Angela Mitchell      Comptabilité
                Alain Maurison       Production
                Isabelle Tcheky      Direction
                Gilbert Menon        Direction
                Jean Picard          NULL

                Cette requête affiche en premier lieu les lignes correspondant à la condition de jointure puis ajoute les
                lignes de la table ‘Personnel’ qui n’ont pas de correspondance avec la table ‘Departement’.

                Comme on peut le remarquer, ‘Personnel’ est bien à droite dans l’écriture de la jointure.




Daniel Muller                                     1 – SQL Server 2000 : les jointures                          Version 1.1
8


                Exemple : jointure externe complète



                Syntaxe SQL-92 :


                SELECT     P.Nom_personnel,
                            D.Nom_departement
                FROM        Departement AS D
                            FULL OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk



                Résultat :

                Nom_personnel               Nom_departement
                Paul Kaiser                 Ingénieurie
                Alain Maurison              Production
                Angela Mitchell             Comptabilité
                Isabelle Tcheky             Direction
                Gilbert Menon               Direction
                NULL                        Partenariat
                Jean Picard                 NULL

                Cette requête va agir en trois étapes :

                    -     Tout d’abord, elle retourne les lignes correspondant à une jointure de type « INNER JOIN ».

                    -     Ensuite, elle affiche le résultat répondant à une jointure de type « LEFT OUTER JOIN ».

                    -     Enfin, elle affiche les lignes cohérentes avec une jointure de type « RIGHT OUTER JOIN ».




                Jointures multiples

                Les exemples cités jusqu’à maintenant offraient des combinaisons de jointures entre deux tables. Il
                est cependant possible de construire une requête basée sur une jointure sur trois tables ou plus
                encore.



                Les conditions de jointures s’écriront simplement les unes à la suite des autres.



                La syntaxe ci-dessous montre une requête de jointure simple entre une table T1 qui est liée à une
                table T2 mais aussi à une table T3 par l’intermédiaire de deux clés étrangères distinctes.



                    Syntaxe SQL-89 :

                    SELECT ‘Liste des colonnes’

                    FROM Table1 AS T1,

                             Table2 AS T2,

                             Table3 AS T3

                    WHERE T2. ‘clé primaire’ = T1. ‘clé étrangère’

                    AND       T3. ‘clé primaire’ = T1. ‘clé étrangère’


Daniel Muller                                             1 – SQL Server 2000 : les jointures                  Version 1.1
9




                    Syntaxe SQL-92 :

                    SELECT ‘Liste des colonnes’

                    FROM     Table1 AS T1

                              INNER JOIN Table2 AS T2 ON T2. ‘clé primaire’ = T1. ‘clé étrangère’

                              INNER JOIN Table3 AS T3 ON T3. ‘clé primaire’ = T1. ‘Clé étrangère’



                Exemple :



                SELECT P.Nom_personnel,
                       D.Nom_departement,
                       E.Description_emploi,
                       P.Salaire
                FROM   Personnel AS P
                       INNER JOIN Departement AS D ON D.Id_departement = P.Departement_fk
                       INNER JOIN Emploi AS E ON E.Id_emploi = P.Emploi_fk




                Résultat :



                Nom_personnel            Nom_departement               Description_emploi           Salaire
                Paul Kaiser              Ingénieurie                   Informaticien                2700.00
                Angela Mitchell          Comptabilité                  Expert Comptable             4200.00
                Alain Maurison           Production                    Technicien                   1480.00
                Isabelle Tcheky          Direction                     Directeur                    5700.00
                Gilbert Menon            Direction                     Manager                      5300.00




                Auto-jointure

                Parfois, certaines tables contiennent une colonne de clé étrangère qui appelle la clé primaire de cette
                même table. Pour visualiser les données, il est donc nécessaire de créer une liaison entre ces deux
                clés. La distinction se fera grâce aux alias.



                    Syntaxe SQL-92 :

                    SELECT T1. ‘Liste des colonnes de la table T1’,

                             T2. ‘Liste des colonnes de la table T2’

                    FROM     Table1 AS T1

                              INNER JOIN Table1 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’




Daniel Muller                                            1 – SQL Server 2000 : les jointures                  Version 1.1
1


                Exemple : Affichage du personnel et de ses supérieurs.

                Prenons le cas de la table ‘Hierarchie’. Elle dresse une liste de personnes et la colonne
                ‘Responsable_Fk’ permet d’identifier à quel supérieur chacune d’elle est liée.

                Le patron, lui, n’a aucun supérieur, d’où la valeur NULL à cette colonne.



                Organigramme :


                                                                   Gérard
                                                                   Thenan




                                                                    Louise
                                                                    Michel




                                                    Paul                            Géraldine
                                                    Keil                             Pelon




                                                                                         Luc
                                                                                        Matserki




                Syntaxe SQL-92 :



                Select H1.Id_Hierarchie,
                       H1.Nom,
                       H1.Prenom,
                       H1.Responsable_Fk,
                       H2.Nom,
                       H2.Prenom
                FROM   Hierarchie AS H1
                       INNER JOIN Hierarchie AS H2 ON H1.Id_Hierarchie = H2.Responsable_Fk




                Résultat :

                Id_Hierarchie       Nom      Prenom    Responsable_FK   Nom                        Prenom
                                1   Thenan   Gérard    NULL             Michel                     Louise
                                2   Michel   Louise                   1 Keil                       Paul
                                2   Michel   Louise                   1 Pelon                      Géraldine
                                4   Pelon    Géraldine                2 Matserki                   Luc




Daniel Muller                                     1 – SQL Server 2000 : les jointures                          Version 1.1
1




Daniel Muller   1 – SQL Server 2000 : les jointures   Version 1.1

Contenu connexe

Tendances

Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Symphorien Niyonzima
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrigeAmineMouhout1
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOALilia Sfaxi
 
QCM basique sur les réseaux informatiques
QCM basique sur les réseaux informatiquesQCM basique sur les réseaux informatiques
QCM basique sur les réseaux informatiquesFrust Rados
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac Amri Ossama
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
introduction au SQL et MySQL
introduction au SQL et MySQLintroduction au SQL et MySQL
introduction au SQL et MySQLAbdoulaye Dieng
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Base de Données Chapitre I .pptx
Base de Données Chapitre I .pptxBase de Données Chapitre I .pptx
Base de Données Chapitre I .pptxAbdoulayeTraore48
 
Cours access
Cours accessCours access
Cours accesskourbali
 
Epreuve concours génie informatique
Epreuve concours génie informatiqueEpreuve concours génie informatique
Epreuve concours génie informatiquebeware_17
 

Tendances (20)

Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrige
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOA
 
QCM basique sur les réseaux informatiques
QCM basique sur les réseaux informatiquesQCM basique sur les réseaux informatiques
QCM basique sur les réseaux informatiques
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Introduction au langage SQL
Introduction au langage SQLIntroduction au langage SQL
Introduction au langage SQL
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
introduction au SQL et MySQL
introduction au SQL et MySQLintroduction au SQL et MySQL
introduction au SQL et MySQL
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Base de Données Chapitre I .pptx
Base de Données Chapitre I .pptxBase de Données Chapitre I .pptx
Base de Données Chapitre I .pptx
 
Cours access
Cours accessCours access
Cours access
 
Epreuve concours génie informatique
Epreuve concours génie informatiqueEpreuve concours génie informatique
Epreuve concours génie informatique
 

Similaire à LES JOINTURES

Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oraclewebreaker
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants SmartnSkilled
 
Chap 3 : structered query language
Chap 3 : structered query languageChap 3 : structered query language
Chap 3 : structered query languageRamzi Trabelsi
 
Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5slardiere
 
Scbd cg conception
Scbd cg conceptionScbd cg conception
Scbd cg conceptionvangogue
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfRihabBENLAMINE
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sqlHanfi Akram
 
SGBDR - MySQL
SGBDR - MySQLSGBDR - MySQL
SGBDR - MySQLMusatge
 
chapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdfchapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdfattamatta1234
 
Principes Relationnels et Concepts Oracle
Principes Relationnelset Concepts OraclePrincipes Relationnelset Concepts Oracle
Principes Relationnels et Concepts Oraclewebreaker
 

Similaire à LES JOINTURES (20)

Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracle
 
SQL-ORACLE.pdf
SQL-ORACLE.pdfSQL-ORACLE.pdf
SQL-ORACLE.pdf
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
 
Introduction_R.pdf
Introduction_R.pdfIntroduction_R.pdf
Introduction_R.pdf
 
Chap 3 : structered query language
Chap 3 : structered query languageChap 3 : structered query language
Chap 3 : structered query language
 
Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5
 
Scbd cg conception
Scbd cg conceptionScbd cg conception
Scbd cg conception
 
Cours3 gdm sql
Cours3 gdm sqlCours3 gdm sql
Cours3 gdm sql
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
 
La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
 
12 fr
12 fr12 fr
12 fr
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sql
 
SGBDR - MySQL
SGBDR - MySQLSGBDR - MySQL
SGBDR - MySQL
 
Sql
SqlSql
Sql
 
chapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdfchapitre6_Le_Langage_SQL-2.pdf
chapitre6_Le_Langage_SQL-2.pdf
 
Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
 
Principes Relationnels et Concepts Oracle
Principes Relationnelset Concepts OraclePrincipes Relationnelset Concepts Oracle
Principes Relationnels et Concepts Oracle
 

Plus de danaobrest

Introduction à La Finance De Marché
Introduction à La Finance De MarchéIntroduction à La Finance De Marché
Introduction à La Finance De Marchédanaobrest
 
Qualification Et Cycle De Vie Du Logiciel
Qualification Et Cycle De Vie Du LogicielQualification Et Cycle De Vie Du Logiciel
Qualification Et Cycle De Vie Du Logicieldanaobrest
 
EURONEXT, LA BOURSE EUROPEENNE
EURONEXT, LA BOURSE EUROPEENNEEURONEXT, LA BOURSE EUROPEENNE
EURONEXT, LA BOURSE EUROPEENNEdanaobrest
 
LES VALEURS MOBILIERES
LES VALEURS MOBILIERESLES VALEURS MOBILIERES
LES VALEURS MOBILIERESdanaobrest
 
LES MARCHES DE LA BOURSE
LES MARCHES DE LA BOURSELES MARCHES DE LA BOURSE
LES MARCHES DE LA BOURSEdanaobrest
 
LA BOURSE DE PARIS
LA BOURSE DE PARISLA BOURSE DE PARIS
LA BOURSE DE PARISdanaobrest
 

Plus de danaobrest (8)

Introduction à La Finance De Marché
Introduction à La Finance De MarchéIntroduction à La Finance De Marché
Introduction à La Finance De Marché
 
Qualification Et Cycle De Vie Du Logiciel
Qualification Et Cycle De Vie Du LogicielQualification Et Cycle De Vie Du Logiciel
Qualification Et Cycle De Vie Du Logiciel
 
L'OBLIGATION
L'OBLIGATIONL'OBLIGATION
L'OBLIGATION
 
L'ACTION
L'ACTIONL'ACTION
L'ACTION
 
EURONEXT, LA BOURSE EUROPEENNE
EURONEXT, LA BOURSE EUROPEENNEEURONEXT, LA BOURSE EUROPEENNE
EURONEXT, LA BOURSE EUROPEENNE
 
LES VALEURS MOBILIERES
LES VALEURS MOBILIERESLES VALEURS MOBILIERES
LES VALEURS MOBILIERES
 
LES MARCHES DE LA BOURSE
LES MARCHES DE LA BOURSELES MARCHES DE LA BOURSE
LES MARCHES DE LA BOURSE
 
LA BOURSE DE PARIS
LA BOURSE DE PARISLA BOURSE DE PARIS
LA BOURSE DE PARIS
 

LES JOINTURES

  • 1. 1 SQL Server 2000 Les jointures 28 JANVIER 2008 CHAPITRE 1 Les jointures sont un moyen en Transact-SQL pour récupérer des informations provenant de plusieurs objets distincts, qu’il s’agisse de tables, tables temporaires ou vues en utilisant si, possible, leurs clefs primaires et étrangères. SQL Server comprend deux types de syntaxe pour respecter une compatibilité ascendante : - Le standard ANSI SQL 89 utilisé sur les SGBD SQL Server 6.5 et 7 - Le standard ANSI SQL 92 exploité réellement à partir de la version 2000 de SQL Server Il existe différents types de jointures, chacune répondant à des besoins précis : 莽莽 诲睢 睦 睨 睨 - Les jointures internes, - Les jointures externes, - Les jointures multiples, - L’auto-jointure. Constitution des tables d’exemple Si la base Northwind fournit un certain nombre d’objets intéressants, de nouvelles tables sont nécessaires pour illustrer au mieux les différents cas de jointures. Imaginons le cas d’une société possédant plusieurs départements dont un dédié aux ressources humaines. Pour la gestion du personnel, les informations seront stockées dans les tables suivantes : - Département, - Emploi, - Personnel, - Client. Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 2. 2 Création des tables : CREATE TABLE Departement ( Id_departement INT NOT NULL CONSTRAINT pk_id_departement PRIMARY KEY, Nom_departement VARCHAR (128) NOT NULL ) CREATE TABLE Emploi ( Id_emploi INT NOT NULL CONSTRAINT pk_id_emploi PRIMARY KEY, Description_emploi VARCHAR (128) NOT NULL ) CREATE TABLE Personnel Id_personnel INT NOT NULL CONSTRAINT pk_id_personnel PRIMARY KEY, Nom_personnel VARCHAR (64) NOT NULL, Departement_fk INT NULL CONSTRAINT fk_departement_fk REFERENCES Departement (Id_departement), Emploi_fk INT NOT NULL CONSTRAINT fk_emploi_fk REFERENCES Emploi (Id_emploi), Salaire DEC (7,2) NOT NULL ) CREATE TABLE Client ( Id_client INT NOT NULL CONSTRAINT pk_id_client PRIMARY KEY, Nom_client VARCHAR (128) NOT NULL, Client_ref CHAR (1) NOT NULL CONSTRAINT chk_client_ref CHECK (Client_Ref IN ('O','N')) ) CREATE TABLE Hierarchie ( Id_Hierarchie INT NOT NULL CONSTRAINT pk_id_hierarchie PRIMARY KEY, Nom VARCHAR (64) NOT NULL, Prenom VARCHAR (64) NOT NULL, Responsable_Fk INT NULL CONSTRAINT responsable_fk REFERENCES Hierarchie (Id_Hierarchie), ) Insertion des données : INSERT INTO Departement VALUES (100, 'Ingénierie') INSERT INTO Departement VALUES (200, 'Production') INSERT INTO Departement VALUES (300, 'Comptabilité') INSERT INTO Departement VALUES (400, 'Direction') INSERT INTO Departement VALUES (500, 'Partenariat') INSERT INTO Emploi VALUES (10, 'Informaticien') INSERT INTO Emploi VALUES (20, 'Technicien') INSERT INTO Emploi VALUES (30, 'Expert Comptable') INSERT INTO Emploi VALUES (40, 'Directeur') INSERT INTO Emploi VALUES (50, 'Manager') Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 3. 3 INSERT INTO Personnel VALUES (1, 'Paul Kaiser', 100, 10, 2700.00) INSERT INTO Personnel VALUES (2, 'Angela Mitchell', 300, 30, 4200.00) INSERT INTO Personnel VALUES (3, 'Alain Maurison', 200, 20, 1480.00) INSERT INTO Personnel VALUES (4, 'Isabelle Tcheky', 400, 40, 5700.00) INSERT INTO Personnel VALUES (5, 'Gilbert Menon', 400, 50, 5300.00) INSERT INTO Personnel VALUES (6, 'Jean Picard', NULL, 20, 1510.00) INSERT INTO Client VALUES (1, 'SOMATRA', 'O') INSERT INTO Client VALUES (2, 'USINOR', 'N') INSERT INTO Client VALUES (3, 'PLASTEX', 'O') INSERT INTO Client VALUES (4, 'GONDRAND & FILS', 'O') INSERT INTO Client VALUES (5, 'CASPER ET FRERES', 'N') INSERT INTO Hierarchie VALUES (1, ‘Thenan’, ' Gérard', NULL) INSERT INTO Hierarchie VALUES (2, ‘Michel’, 'Louise',1) INSERT INTO Hierarchie VALUES (3, ‘Keil’, ‘Paul’, 2) INSERT INTO Hierarchie VALUES (4, ‘Pelon’, ‘Géraldine’, 2) INSERT INTO Hierarchie VALUES (5, ‘Matserki’, ‘Luc’, 4) Relations entre les tables : La table ‘Personnel’ est liée aux tables ‘Emploi’ et ‘Departement’ par deux clés étrangères. Rappel : Ecriture d’une clause ‘SELECT’ Une clause ‘SELECT’ s’écrit de la manière suivante : Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 4. 4 SELECT ‘Liste des colonnes’ FROM Table WHERE “Condition” GROUP BY “Liste des colonnes” HAVING “Condition” ORDER BY “Liste des colonnes” (« DESC »| « ASC ») Jointure Interne Une jointure interne lie deux tables par une condition d’égalité et ne retournent que les informations conformes à cette condition. Cette égalité porte de préférence sur les liens établis entre les deux tables, soit la clé primaire de la première table et la clé étrangère de la seconde table. Syntaxe SQL-89 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1, Table2 AS T2 WHERE T1. ‘Clé primaire’ = T2. ‘Clé étrangère’ Syntaxe SQL-92 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1 INNER JOIN Table2 AS T2 ON T1. ‘Clé primaire’ = T2. ‘Clé étrangère’ WHERE ‘Condition’ Exemple : On souhaite afficher la liste des salariés ainsi que leur département respectifs. Pour cela, les tables ‘Personnel’ et ‘Departement’ vont être utilisées. Résultat : Nom_personnel Nom_departement Paul Kaiser Ingénieurie Angela Mitchell Comptabilité Alain Maurison Production Isabelle Tcheky Direction Gilbert Menon Direction Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 5. 5 Syntaxe SQL-89 : SELECT P.Nom_personnel, D.Nom_departement FROM Departement AS D, Personnel AS P WHERE D.Id_departement = P.Departement_fk Syntaxe SQL-92: SELECT P.Nom_personnel, D.Nom_departement FROM Departement AS D INNER JOIN Personnel AS P ON D.Id_departement = P.departement_fk Remarque : - La clause ‘INNER JOIN’ ne prend en compte que les informations répondant à la condition de jointure. Aussi, les informations qui n’ont pas de liens n’apparaissent dans le résultat final : o Jean Picard n’a pas de département attitré. o Le département ‘Partenariat’ ne compte aucun employé. - Il est possible de simplifier l’écriture de la requête en supprimant la clause ‘INNER’ car la jointure interne est le fonctionnement par défaut du moteur SQL. Jointure Externe Une jointure externe permet de retourner les lignes répondant à la condition de jointure mais aussi toutes celles de la première table, de la seconde table ou des deux qui ne vérifient pas la jointure. Pour cela, trois expressions sont possibles : - L’expression LEFT OUTER JOIN retourne toutes les lignes répondant à la condition de jointure et celles de la table appelée par la clause FROM qui n’y répondent pas. Syntaxe SQL-89 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1, Table2 AS T2 WHERE T1. ‘clé primaire’ *= T2. ‘clé étrangère’ Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 6. 6 Syntaxe SQL-92 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’ - L’expression RIGHT OUTER JOIN retourne toutes les lignes vérifiant la condition de jointure et toutes celles de la table appelée par la clause JOIN qui n’y répondent pas. Syntaxe SQL-89 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1, Table2 AS T2 WHERE T1. ‘clé primaire’ =* T2. ‘clé étrangère’ Syntaxe SQL-92 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1 RIGHT OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’ - L’expression FULL OUTER JOIN retourne toutes les lignes correspondant à la condition de jointure mais affiche également toutes les lignes des deux tables utilisées dans la requête. Syntaxe SQL-89 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1, Table2 AS T2 WHERE T1. ‘clé primaire’ *=* T2. ‘clé étrangère’ Syntaxe SQL-92 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1 FULL OUTER JOIN Table2 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’ Cette dernière jointure est généralement à éviter vu le nombre de lignes qu’elle peut retourner. Pour illustrer les différents cas de jointure externes, nous allons nous inspirer de l’exemple précédent. Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 7. 7 Exemple : jointure externe gauche Syntaxe SQL-92 : SELECT P.Nom_personnel, D.Nom_departement FROM Departement AS D LEFT OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk Résultat : Nom_personnel Nom_departement Paul Kaiser Ingénieurie Alain Maurison Production Angela Mitchell Comptabilité Isabelle Tcheky Direction Gilbert Menon Direction NULL Partenariat Cette requête va afficher tout d’abord toutes les lignes répondant à la condition de jointure puis celles de la table ‘Departement’ qui n’ont pas de correspondance avec la table ‘Personnel’. Exemple : jointure externe droite Syntaxe SQL-92 : SELECT P.Nom_personnel, D.Nom_departement FROM Departement AS D RIGHT OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk Résultat : Nom_personnel Nom_departement Paul Kaiser Ingénieurie Angela Mitchell Comptabilité Alain Maurison Production Isabelle Tcheky Direction Gilbert Menon Direction Jean Picard NULL Cette requête affiche en premier lieu les lignes correspondant à la condition de jointure puis ajoute les lignes de la table ‘Personnel’ qui n’ont pas de correspondance avec la table ‘Departement’. Comme on peut le remarquer, ‘Personnel’ est bien à droite dans l’écriture de la jointure. Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 8. 8 Exemple : jointure externe complète Syntaxe SQL-92 : SELECT P.Nom_personnel, D.Nom_departement FROM Departement AS D FULL OUTER JOIN Personnel AS P ON D.Id_departement = P.departement_fk Résultat : Nom_personnel Nom_departement Paul Kaiser Ingénieurie Alain Maurison Production Angela Mitchell Comptabilité Isabelle Tcheky Direction Gilbert Menon Direction NULL Partenariat Jean Picard NULL Cette requête va agir en trois étapes : - Tout d’abord, elle retourne les lignes correspondant à une jointure de type « INNER JOIN ». - Ensuite, elle affiche le résultat répondant à une jointure de type « LEFT OUTER JOIN ». - Enfin, elle affiche les lignes cohérentes avec une jointure de type « RIGHT OUTER JOIN ». Jointures multiples Les exemples cités jusqu’à maintenant offraient des combinaisons de jointures entre deux tables. Il est cependant possible de construire une requête basée sur une jointure sur trois tables ou plus encore. Les conditions de jointures s’écriront simplement les unes à la suite des autres. La syntaxe ci-dessous montre une requête de jointure simple entre une table T1 qui est liée à une table T2 mais aussi à une table T3 par l’intermédiaire de deux clés étrangères distinctes. Syntaxe SQL-89 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1, Table2 AS T2, Table3 AS T3 WHERE T2. ‘clé primaire’ = T1. ‘clé étrangère’ AND T3. ‘clé primaire’ = T1. ‘clé étrangère’ Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 9. 9 Syntaxe SQL-92 : SELECT ‘Liste des colonnes’ FROM Table1 AS T1 INNER JOIN Table2 AS T2 ON T2. ‘clé primaire’ = T1. ‘clé étrangère’ INNER JOIN Table3 AS T3 ON T3. ‘clé primaire’ = T1. ‘Clé étrangère’ Exemple : SELECT P.Nom_personnel, D.Nom_departement, E.Description_emploi, P.Salaire FROM Personnel AS P INNER JOIN Departement AS D ON D.Id_departement = P.Departement_fk INNER JOIN Emploi AS E ON E.Id_emploi = P.Emploi_fk Résultat : Nom_personnel Nom_departement Description_emploi Salaire Paul Kaiser Ingénieurie Informaticien 2700.00 Angela Mitchell Comptabilité Expert Comptable 4200.00 Alain Maurison Production Technicien 1480.00 Isabelle Tcheky Direction Directeur 5700.00 Gilbert Menon Direction Manager 5300.00 Auto-jointure Parfois, certaines tables contiennent une colonne de clé étrangère qui appelle la clé primaire de cette même table. Pour visualiser les données, il est donc nécessaire de créer une liaison entre ces deux clés. La distinction se fera grâce aux alias. Syntaxe SQL-92 : SELECT T1. ‘Liste des colonnes de la table T1’, T2. ‘Liste des colonnes de la table T2’ FROM Table1 AS T1 INNER JOIN Table1 AS T2 ON T1. ‘clé primaire’ = T2. ‘clé étrangère’ Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 10. 1 Exemple : Affichage du personnel et de ses supérieurs. Prenons le cas de la table ‘Hierarchie’. Elle dresse une liste de personnes et la colonne ‘Responsable_Fk’ permet d’identifier à quel supérieur chacune d’elle est liée. Le patron, lui, n’a aucun supérieur, d’où la valeur NULL à cette colonne. Organigramme : Gérard Thenan Louise Michel Paul Géraldine Keil Pelon Luc Matserki Syntaxe SQL-92 : Select H1.Id_Hierarchie, H1.Nom, H1.Prenom, H1.Responsable_Fk, H2.Nom, H2.Prenom FROM Hierarchie AS H1 INNER JOIN Hierarchie AS H2 ON H1.Id_Hierarchie = H2.Responsable_Fk Résultat : Id_Hierarchie Nom Prenom Responsable_FK Nom Prenom 1 Thenan Gérard NULL Michel Louise 2 Michel Louise 1 Keil Paul 2 Michel Louise 1 Pelon Géraldine 4 Pelon Géraldine 2 Matserki Luc Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1
  • 11. 1 Daniel Muller 1 – SQL Server 2000 : les jointures Version 1.1