Comment utiliser l'externe sql rejoindre

Lorsque vous vous joignez deux tables SQL, le premier (appeler l'un sur la gauche) peut avoir des lignes qui ne disposent pas homologues correspondant à la deuxième table (l'un sur la droite). Inversement, le tableau sur la droite peut avoir des lignes qui ne disposent pas homologues correspondant dans le tableau sur la gauche.

Sommaire

Si vous effectuez une jointure interne sur ces tables, toutes les lignes inégalées sont exclus de la sortie. Jointures externes, Cependant, ne pas exclure les lignes inégalées. Les jointures externes sont de trois types: la jointure externe gauche, la jointure externe droite, et la jointure externe complète.

LEFT JOIN externe

Dans une requête qui comprend une jointure, la table de gauche est celui qui précède le mot-clé INSCRIPTION, et la table de droite est celui qui le suit. La LEFT OUTER JOIN préserve rangées inégalées de la table gauche, mais rejette rangées inégalées de la table de droite.

Pour comprendre rejoint externe, pensez à une base de données d'entreprise qui tient des registres des employés, services et établissements de la Société.

LOCATION_IDVILLE
1Boston
3Tampa
5Chicago

Ici la société suit les départements.

DEPT_IDLOCATION_IDNOM
211Ventes
241Administrateur
275Réparation
295Stock

Ici la société suit les employés.

EMP_IDDEPT_IDNOM
6124Église
6327McCoy

Maintenant, supposons que vous voulez voir toutes les données pour tous les employés, y compris service et l'emplacement. Vous obtenez ce avec une équi-jointure:

SELECT * DE LOCATION L, DEPT D, EMPLOYÉ EWHERE L.LocationID = D.LocationIDAND D.DeptID = E.DeptID -

Cette instruction donne le résultat suivant:

1 Boston 24 1 61 24 Administrateur Kirk5 Chicago 27 5 63 27 réparation McCoy

Ce tableau de résultat donne toutes les données pour tous les employés, y compris l'emplacement et le service. L'équi-jointure œuvres parce que chaque salarié bénéficie d'un emplacement et d'un département.




Ensuite, supposons que vous voulez que les données sur les lieux, avec les données des services et des employés connexes. Ceci est un problème différent car un emplacement sans services associés peut exister. Pour obtenir ce que vous voulez, vous devez utiliser une jointure externe, comme dans l'exemple suivant:

SELECT * FROM LIEU L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) LEFT OUTER JOIN EMPLOYÉ EON (D.DeptID = E.DeptID) -

Cette rejoindre données tire de trois tables. Tout d'abord, la table de localisation est jointe à la table DEPT. Le jeu de résultats est ensuite jointe à la table EMPLOYEE. Lignes de la table sur la gauche de la LEFT OUTER JOIN opérateur qui possède aucune ligne correspondante dans le tableau sur la droite sont inclus dans le résultat.

Ainsi, dans la première jointure, tous les emplacements sont inclus, même si aucun service associé avec eux existe. Dans la deuxième rejoindre, tous les ministères sont inclus, même si aucun employé associé avec eux existe. Le résultat est le suivant:

1 Boston 24 1 61 24 Administrateur Kirk5 Chicago 27 5 63 27 réparation McCoy3 Tampa null null null null null NULL5 Chicago 29 5 Stock Null Null NULL1 Boston 21 1 Sales null null null

Les deux premières rangées sont les mêmes que les deux rangées de résultats dans l'exemple précédent. La troisième rangée (3 Tampa) A des valeurs nulles dans le département et des employés colonnes car aucun départements sont définis pour Tampa et pas d'employés y sont stationnées.

Les quatrième et cinquième lignes (5 Chicago et 1 Boston) Contiennent des données sur la Stock et le Ventes départements, mais le Employé colonnes pour ces lignes contiennent des valeurs nulles parce que ces deux ministères ont pas d'employés. Cette jointure externe vous dit tout ce que l'équi-jointure vous a dit - plus les éléments suivants:

  • Tous les emplacements de l'entreprise, éventuels qu'ils ont départements ou non

  • Tous les départements de l'entreprise, qu'ils aient ou non des employés

Les lignes retournées dans l'exemple précédent ne sont pas garantis pour être dans l'ordre que vous voulez. L'ordre peut varier d'une mise en œuvre à l'autre. Pour vous assurer que les lignes renvoyées sont dans l'ordre que vous voulez, ajouter une COMMANDÉ PAR article à votre SELECT déclaration, comme ceci:

SELECT * FROM LIEU L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) LEFT OUTER JOIN EMPLOYÉ EON (D.DeptID = E.DeptID) ORDER BY L.LocationID, D.DeptID, E.EmpID-

Vous pouvez abréger la jointure externe gauche langue LEFT JOIN parce qu'il n'y a pas une telle chose comme un gauche intérieur rejoindre.

Jointure externe droite

La jointure externe droite préserve rangées inégalées de la table de droite, mais rejette rangées inégalées de la table de gauche. Vous pouvez l'utiliser sur les mêmes tables et obtenir le même résultat en inversant l'ordre dans lequel vous présentez des tableaux à la rejoindre:

SELECT * FROM EMPLOYÉ E RIGHT OUTER JOIN DEPT DON (D.DeptID = E.DeptID) RIGHT OUTER JOIN LOCATION LON (L.LocationID = D.LocationID) -

Dans cette formulation, le premier produit rejoindre une table qui contient tous les ministères, qu'ils aient un employé associé ou non. La deuxième rejoindre produit un tableau qui contient tous les endroits, si elles ont un département associé ou non.

Vous pouvez abréger la jointure externe droite langue RIGHT JOIN parce qu'il n'y a pas une telle chose comme un droit intérieur rejoindre.

Jointure externe complète

La pleine de jointure externe combine les fonctions de la jointure externe gauche et la droite de jointure externe. Il conserve les lignes inégalée à la fois les bonnes tables et de gauche. Prenons le cas le plus général de la base de données de l'entreprise utilisée dans les exemples précédents. Il pourrait avoir

  • Sites avec aucun départements

  • Les ministères ayant pas d'emplacements

  • Départements sans employés

  • Les employés sans départements

Pour montrer tous les endroits, les départements et les employés, indépendamment du fait qu'ils ont des lignes correspondantes dans les autres tables, utilisez une jointure externe complète sous la forme suivante:

SELECT * FROM LIEU L FULL OUTER JOIN DEPT DON (L.LocationID = D.LocationID) FULL OUTER JOIN EMPLOYÉ EON (D.DeptID = E.DeptID) -

Vous pouvez abréger l'ensemble de jointure externe langue FULL JOIN parce qu'il n'y a pas une telle chose comme un grand intérieur rejoindre.


» » » » Comment utiliser l'externe sql rejoindre