Jointure interne et gauche externe avec clause Where et clause ON

Filtrer les résultats avec la clause [ON] et la clause [Where] à l'aide de LEFT OUTER JOIN et INNER JOIN est une technique très puissante.

Un JOINTURE INTERNE donne les lignes qui correspondent aux valeurs dans les colonnes communes de deux ou plusieurs tables en utilisant un opérateur comme (=) égal.

UNE LEFT JOIN ou LEFT OUTER JOIN donne toutes les lignes de la table de gauche avec les lignes correspondantes des deux tables. Lorsqu'une ligne de la table de gauche n'a pas de ligne correspondante dans la table de droite, la ligne du jeu de résultats associé contient des valeurs null pour toutes les colonnes de la liste de sélection provenant de la table de droite.

Maintenant, nous allons montrer comment cela fonctionne.

Nous allons créer deux tables: FRUIT et FRUIT_COLOR.

SI OBJECT_ID ('FRUIT') N'EST PAS NUL DROP TABLE DROP FRUIT; GO CREATE TABLE FRUIT (nom VARCHAR (25), couleur INT); GO SI OBJECT_ID ('FRUIT_COLOR') N'EST PAS NUL DROP TABLE FRUIT_COLOR; GO CREATE TABLE FRUIT_COLOR (id INT, nom VARCHAR (25)); ALLER


En ce qui concerne la structure des tables créées, la table FRUIT_COLOR a une colonne unique (ID) et une couleur (nom).

La table FRUIT est composée de fruits (nom) et de leurs couleurs respectives.

Je n'ai pas créé de relation de clé primaire ni de relation de clé étrangère pour simplifier les choses, mais vous pouvez facilement comprendre la clé primaire. FRUIT_COLOR (ID) est une clé étrangère à FRUIT (couleur).

Remplissez ces tables avec des données.

INSERT dans les valeurs de FRUIT_COLOR (1, 'orange'); INSERT dans les valeurs de FRUIT_COLOR (2, 'yellow'); INSERT dans les valeurs de FRUIT_COLOR (3, 'rouge'); INSERT dans les valeurs de FRUIT_COLOR (4, 'blue'); GO INSERT sur les valeurs de fruits («banane», 2); INSERT dans les valeurs de fruits («mangue», 2); INSERT dans les valeurs de fruits ('orange', 1); INSÉRER DANS LES VALEURS DE FRUITS ('pomme', 3); INSCRIRE DANS LES VALEURS DE FRUITS ('raisins', null); INSERT dans les valeurs de fruits ('avocat', null); GO SELECT * de FRUITS; SELECT * from FRUIT_COLOR; ALLER

Nous allons démontrer différents scénarios avec une jointure externe gauche.

Requête 1.1 - Une jointure extérieure gauche simple et simple

SELECT * FROM FRUIT F LEFT joint externe FRUIT_COLOR FC ON F.color = FC.id; ALLER


Comme nous connaissons le concept de LEFT OUTER JOIN, nous savons qu'il affichera toutes les lignes de la table de gauche. Dans ce cas, FRUIT est la table de gauche et si une correspondance est trouvée avec la table de droite appelée FRUIT_COLOR, les lignes correspondantes seront affichées. Sinon, il retournera NULL.

Dans l'exemple ci-dessus, les raisins et les avocats ont la couleur NULL. La comparaison NULL échoue donc et renvoie NULL.

Requête 1.2 - Une jointure externe gauche avec la clause Where

SELECT * FROM FRUIT F LEFT joint externe FRUIT_COLOR FC ON F.color = FC.id WHERE F.name = 'apple'; ALLER


Lorsque nous ajoutons une clause where avec une jointure externe gauche, elle se comporte comme une jointure interne, où le filtre est appliqué après la clause ON, affichant uniquement les lignes portant des fruits portant le nom «apple».

Requête 1.3 - Une jointure externe gauche avec la clause ON

SELECT * de la jointure externe FRUIT F LEFT FRUIT_COLOR FC ON F.color = FC.id AND F.name = 'apple'; ALLER


Dans la requête ci-dessus, la plupart des gens s'embrouillent sur la façon dont cette requête est évaluée. Vous pouvez voir les résultats ci-dessous. Toutes les lignes de la table de gauche sont incluses dans le jeu de résultats sous la forme d'une requête de jointure externe gauche que nous avons vue dans la requête 1.1, mais à partir de la seconde table (fruit_color), seules les lignes affichées sont affichées. correspondre à la condition f.name = 'apple.' Sinon, il est indiqué comme NULL.

Ceci est utile lors du filtrage de données avec une jointure externe gauche. La clause [ON] peut être utile lorsque nous devons renvoyer toutes les lignes de la table de gauche et uniquement celles de la table de droite qui correspondent à la condition de la clause On.


- Requête 1.4 - Une jointure interne avec la clause Where

SELECT * FROM FRUIT F INNER rejoindre FRUIT_COLOR FC ON F.color = FC.id WHERE F.name = 'orange'; ALLER


- Requête 1.5 - Une jointure interne avec la clause ON

SELECT * FROM FRUIT F INNER rejoindre FRUIT_COLOR FC ON F.color = FC.id AND F.name = 'orange'; ALLER


Vous pouvez voir à la fois la requête 1.4 et la requête 1.5, à l'aide d'une jointure interne, renvoyer le même résultat, peu importe l'endroit où vous filtrez les lignes avec une jointure interne. Avec la clause on ou la clause where, les deux cas vous donneront les mêmes résultats.