Les jointures internes et externes sont utilisées pour combiner les données de deux ou plusieurs tables; cependant, il y a quelques différences clés! Lisez cet article pour découvrir les points forts de chaque commande et quand les utiliser.
Pour tirer le meilleur parti de ceci et de nos autres leçons, assurez-vous de vous entraîner à utiliser les exemples!
Tous les Les exemples de cette leçon sont basés sur Microsoft SQL Server Management Studio et la base de données AdventureWorks2012. Commencez à utiliser ces outils gratuits à laide de mon guide Prise en main de SQL Server.
Quelle est la différence entre les jointures internes et les jointures externes?
Les jointures internes et externes combinent des lignes de deux ou plusieurs tables en un seul résultat en utilisant une condition de jointure. La condition de jointure spécifie comment les colonnes de chaque table sont mises en correspondance les unes avec les autres. Dans la plupart des cas, lobjectif est de trouver des valeurs égales entre les tables et dinclure ces correspondances.
Le cas le plus courant est celui où vous faites correspondre la clé étrangère dune table à la clé primaire dune autre , comme lorsque vous utilisez et ID pour rechercher une valeur.
Bien que les jointures internes et externes incluent des lignes des deux tables lorsque la condition de correspondance est réussie, elles diffèrent dans la manière dont elles gèrent une condition de correspondance erronée.
Les jointures internes nincluent pas de lignes non correspondantes; tandis que les jointures externes les incluent.
Explorons un peu plus en profondeur la mécanique de chaque jointure
Mécanique de jointure interne
Une jointure interne est utilisée pour renvoyer les résultats en combinant les lignes de deux ou plusieurs tables.
Dans son cas le plus simple, où il ny a pas de condition de jointure, une jointure interne combinerait toutes les lignes dune table avec celles dune autre. Si la première table contenait trois lignes et la seconde quatre, alors le résultat final en contiendrait douze (3 x 4 = 12)!
Le but de la condition de jointure est de limiter les lignes combinées. Dans la plupart des cas, nous limitons les lignes à celles qui correspondent à une colonne.
Si une personne a plus dun numéro de téléphone, alors plusieurs correspondances sont effectuées. À partir de là, vous pouvez voir que nous pouvons obtenir plus de lignes renvoyées que nous nen avons pour chaque personne.
Inversement, si une personne na pas de numéro de téléphone, il ny aura pas dentrée dans PersonPhone et aucune correspondance nest établie. Cette personne en particulier ne sera pas incluse dans les résultats, car seuls ceux avec des correspondances sont inclus.
Essayons un exemple.
Exemple de jointure interne
Supposons le responsable RH souhaite créer un annuaire téléphonique. Ils veulent le prénom, le nom, le titre et les numéros de téléphone de la personne. Quelle requête pouvez-vous utiliser pour créer ceci?
En voici une qui ferait laffaire:
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
LINNER JOIN spécifie quelles tables rejoindre et la condition de correspondance pour le faire. La condition PH.Phone NumberTyeID = 3 limite la requête aux numéros de travail.
Si vous exécutez ce qui précède, vous obtenez les résultats suivants:
Gardez à lesprit que la jointure interne ne renvoie que la ligne où la condition de correspondance est vrai. Dans cet exemple, les lignes dans lesquelles le BusinessEntityID ne correspond pas ne sont pas incluses. Cela peut être un problème si une personne na pas de numéro de téléphone car ces employés ne seraient pas sur la liste.
Si vous souhaitez inclure ces employés, vous pouvez utiliser une jointure externe.
Mécanique de jointure externe
Une jointure externe est utilisée pour renvoyer des résultats en combinant des lignes de deux tables ou plus. Mais contrairement à une jointure interne, la jointure externe renverra chaque ligne dune table spécifiée, même si la condition de jointure échoue.
Prenons lexemple de lannuaire téléphonique ci-dessus. Si le responsable des ressources humaines souhaitait répertorier tous les employés, quils aient ou non un numéro de téléphone professionnel, lutilisation dune jointure externe le ferait.
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
Vous pouvez en savoir plus sur les jointures externes gauche et droite dans cet article, pour linstant, comprenez simplement que lorsquune JOINTURE EXTERNE GAUCHE est utilisée, toutes les lignes de la table de la clause FROM sont incluses dans le résultat, même si aucune correspondance nest trouvée avec le autre table.
Lorsquune correspondance nest pas trouvée, un NULL est placé dans la colonne.
Vous pouvez voir cela en action ci-dessous:
Notez dans lexemple le Le numéro de téléphone de Catherine Abel est NULL. En effet, le numéro de travail de Catherine nest pas répertorié et aucune correspondance na été trouvée lors de la jointure.
Sil sagissait dune jointure interne, cette ligne naurait pas été incluse dans les résultats.