Dans cet article, nous allons apprendre les bases de la jointure de tables en SQL. Nous allons en apprendre davantage sur les JOIN gauche, droit, intérieur et extérieur et donner des exemples sur la façon de les utiliser.
Les données d'un RDBMS (Relational Database Management System) sont regroupées dans des tables. Ces tables ont une définition rigide du type de données qui peuvent y être stockées. Pour connecter différentes tables, et donc différents types de données pouvant être liées entre elles, nous utiliserons la clause JOIN.
Types de JOIN
Il existe quatre types de base de JOIN :INNER, OUTER, LEFT et RIGHT. Lors de la connexion de deux tables, elles renverront chacune un sous-ensemble différent des tables correspondantes en fonction de la condition de la clause ON.
- Les jointures LEFT et RIGHT JOIN effectuent une tâche similaire. Ils renvoient tous deux l'intégralité d'une seule table avec des informations liées à la deuxième table.
- Les INNER et OUTER JOIN effectuent des tâches très différentes. INNER JOIN produit un résultat très limité, tandis que OUTER renvoie un ensemble de données complet.
Dans cet exemple, nous utilisons l'exemple d'un service commercial pour ce didacticiel, en utilisant trois tables :vendeurs, commandes et clients.
Le tableau des vendeurs aura trois colonnes :id, nom et taux de commission.
Ensuite, le tableau des commandes contiendra quatre colonnes :l'ID de la commande, le coût total de la commande, le client et, le cas échéant, le vendeur.
La table des clients contiendra deux colonnes :id et informations de contact de base.
Ainsi, nous avons maintenant plusieurs tableaux d'informations qui sont utiles à différentes personnes de différentes manières. À l'aide de ces trois tableaux (vendeurs, commandes et client), nous fournirons des exemples de l'utilité de chacun des JOIN.
JOINTURE GAUCHE
Le type de JOIN le plus couramment utilisé est probablement le LEFT JOIN. Si vous pensez que les deux tables sont jointes, celle mentionnée dans la clause FROM se trouve à gauche. Celui mentionné dans la clause JOIN est à droite. Dans un LEFT JOIN, chaque ligne de la table LEFT (ou FROM) est renvoyée dans le résultat et est liée aux lignes correspondantes de la table RIGHT (ou JOIN) qui correspondent à la clause ON.
Gardez à l'esprit que certaines lignes à GAUCHE peuvent ne pas avoir de données correspondantes à DROITE. Dans ce cas, les champs qui auraient été renseignés à partir de la table RIGHT dans le résultat seront renseignés par une valeur NULL.
En outre, si plusieurs lignes de la table RIGHT correspondent aux lignes de la table LEFT, plusieurs lignes seront incluses dans le jeu de résultats. Un diagramme de Venn montre à quoi ressemblerait un LEFT JOIN visualisé :
Le directeur marketing vous demande un rapport sur toutes les commandes ventilées par client. Vous pouvez utiliser un LEFT JOIN pour cela :
SELECT *
FROM orders
LEFT JOIN customer
ON orders.customer_id = customer.id;
Cette requête demande toutes les données de la table "orders" liées aux lignes de la table "customer", où l'id du client est égal au customer_id dans la commande. Le résultat ressemblerait à ceci :
Notez que pour le client Widgets LLC, il y a trois entrées car il a eu trois commandes. Jolly Inc. a passé deux commandes et Acme Inc en a passé une. Cheapo n'apparaît pas sur cette liste car aucune commande n'a été passée.
JOINTURE À DROITE
Le RIGHT JOIN est très similaire au LEFT JOIN, sauf qu'il renvoie chaque ligne de la table RIGHT (JOIN) et uniquement les lignes correspondantes de la table LEFT (FROM). Encore une fois, s'il n'y a pas de données dans la table LEFT, ces colonnes seront remplies avec des valeurs NULL.
S'il y a plusieurs lignes dans la table LEFT, il y aura plusieurs lignes dans le jeu de résultats. Son diagramme de Venn ressemblerait à ceci :
Si la direction veut un rapport avec CHAQUE client ; même s'ils n'ont pas passé de commande, nous pourrions utiliser un RIGHT JOIN.
SELECT *
FROM orders
RIGHT JOIN customer
ON orders.customer_id = customer.id;
Encore une fois, nous commençons avec la table "commandes" et la REJOIGNONS à la table client. Parce que nous avons utilisé un RIGHT JOIN, nous obtiendrons au moins une ligne pour chaque entrée dans la table RIGHT (JOIN), client. Lorsqu'il y a une correspondance entre customer.id et orders.customer_id, les informations sont remplies. Les résultats incluent Cheapo Co avec des valeurs NULL dans les colonnes de commande :
JOINTURE INTERNE
Un INNER JOIN renvoie uniquement les lignes de chaque colonne qui correspondent à la clause ON. S'il n'y a pas de correspondance à DROITE, les lignes de GAUCHE sont exclues et vice versa. Le diagramme de Venn pour un INNER JOIN ressemble à ceci :
C'est le jour de paie et le service de la paie a besoin de savoir combien de commission verser. Pour cela, ils auront besoin de connaître les commandes qui ont été passées par l'intermédiaire de chaque vendeur. Notez que toutes les commandes ne sont pas passées par un vendeur, nous ne nous en soucions donc pas. Pour cela, nous pouvons utiliser un INNER JOIN :
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
INNER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Encore une fois, nous commençons avec le tableau des commandes. Cette fois, nous le REJOIGNONS avec la table des vendeurs. S'il existe une entrée dans la table des commandes qui correspond à une entrée dans la table des vendeurs, la ligne sera incluse. Au lieu de remplir des lignes sans correspondance avec des valeurs NULL, ces lignes sont ignorées dans les résultats.
Veuillez noter que nous demandons à la base de données non seulement de renvoyer le montant de la vente et le taux de commission, mais également la commission calculée. Les résultats ressembleraient à ceci :
JOINTURE EXTERNE
Un OUTER JOIN renvoie tout, qu'il y ait ou non une correspondance. Si vous deviez combiner les résultats d'un LEFT et RIGHT JOIN, vous obtiendriez un OUTER JOIN. Le diagramme de Venn pour une OUTER JOIN ressemble à ceci :
Maintenant, c'est la fin du mois et le directeur des ventes veut connaître TOUTES les ventes ainsi que toutes les commissions qui ont été versées. Pour cela nous allons utiliser un OUTER JOIN :
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
FULL OUTER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Comme le rapport de paie, nous commençons par les commandes et JOIN aux vendeurs. La différence est qu'avec une OUTER JOIN, vous obtiendrez des résultats des tables LEFT et RIGHT avec NULL rempli là où il n'y a pas de correspondance correspondante. Les résultats ressemblent à ceci :
Maintenant, rappelez-vous que nous avons dit que MariaDB et MySQL ne prennent pas en charge OUTER JOIN. Nous avons également dit que si vous ajoutez un LEFT JOIN à un RIGHT JOIN, vous obtiendrez un OUTER JOIN. L'astuce dans ces deux systèmes est de faire exactement cela. Nous y parvenons avec la clause UNION. Il ajoute les résultats d'une requête à une autre :
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
UNION
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
RIGHT JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Les résultats ressembleraient à ceci :
JOINTURE MULTIPLE
JOIN vous permet également de connecter plus de deux tables. Si nous voulons un rapport de vente complet avec des informations sur les clients et les vendeurs, nous faisons simplement un autre JOIN à la fin.
SELECT *
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
LEFT JOIN customer
ON customer.id = orders.customer_id;
Dans cet exemple, nous commençons par la table des commandes et la connectons à la table des vendeurs comme nous le faisions auparavant. L'étape suivante consiste à JOINDRE la table à la table client. Cela remplira toutes les informations pouvant être liées au tableau des commandes.
Cet article est une brève introduction et n'est pas destiné à être une discussion exhaustive sur la façon dont JOIN peut être utilisé dans SQL.
Cliquez ci-dessous pour utiliser ce coupon pratique dès aujourd'hui !
Liquid Web possède certains des serveurs de base de données les plus puissants du secteur. Ces serveurs peuvent être utilisés pour exécuter la plus petite entreprise à domicile jusqu'aux plus grands clusters multi-bases de données pour les entreprises à l'échelle de l'entreprise.
Appelez-nous au 800.580.4985, ou ouvrez un chat ou un ticket avec nous pour parler avec l'un de nos conseillers expérimentés en solutions ou en hébergement pour savoir comment vous pouvez tirer parti de ces techniques dès aujourd'hui !