Dans cet article, nous allons examiner de près les JOIN SQL Server. Nous passerons en revue tous les types de JOIN SQL Server pris en charge avec une syntaxe, des illustrations visuelles et des exemples.
Comme nous le savons tous, les données de table sont au cœur de toute base de données SQL. Pour l'utiliser efficacement, les administrateurs de base de données doivent extraire régulièrement des enregistrements de plusieurs tables en fonction de certaines conditions. Et c'est exactement à cela que servent les SQL JOIN.
JOIN est une clause SQL utilisée pour récupérer le données de deux tables ou plus basées sur des relations logiques entre les tables. Les jointures indiquent comment SQL Server doit utiliser les données d'une table pour sélectionner les lignes d'une autre table.
Différents types de JOIN en SQL
SQL Server prend en charge différents types de JOIN, y compris INNER JOIN , AUTO-JOINTURE , JOINTURE CROISÉE , et OUTER JOIN . En fait, chaque type de jointure définit la façon dont deux tables sont liées dans une requête. Les OUTER JOINS, à leur tour, peuvent être divisés en LEFT OUTER JOINS , JOINTURES EXTERNES DROITES , et JOINS EXTERNES COMPLETS .
Pour mieux illustrer le fonctionnement des JOIN, nous allons créer deux tables.
CREATE TABLE AdventureWorks2019.dbo.users (
auid INT IDENTITY
,username VARCHAR(50) NOT NULL
,password VARCHAR(50) NOT NULL
,createdate DATETIME NOT NULL
,isActive TINYINT NOT NULL
);
CREATE TABLE AdventureWorks2019.dbo.userprofile (
apid INT NOT NULL
,auid INT NOT NULL
,firstname VARCHAR(50) NOT NULL
,lastname VARCHAR(50) NOT NULL
,email VARCHAR(100) NOT NULL
,phone VARCHAR(45) NOT NULL
);
Ensuite, nous devons insérer les données dans les tables créées.
USE AdventureWorks2019
GO
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(1,'admin','pswrd123', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(1,1,'Jack', 'Wolf', '[email protected]','600075764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(2, 'admin1','pass506', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(2, 3, 'Tom', 'Collins', '[email protected]','878511311054');
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(4,'fox12','[email protected]', GETDATE(), 1);
Insert into userprofile
(apid, auid, firstname, lastname, email, phone)
values
(4,5,'Bill', 'Fonskin', '[email protected]','450985764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(6, 'lexus1267','98hnfRT6', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(7, 7, 'John', 'Hopkins', '[email protected]','878511311054');
JOINTURE INTERNE SQL
L'instruction INNER JOIN renvoie les enregistrements dont les valeurs correspondent dans les deux tables.
La syntaxe de la clause SQL INNER JOIN est la suivante :
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
JOINTURE EXTERNE SQL
Contrairement aux clauses INNER JOIN, les OUTER JOIN renvoient non seulement les enregistrements correspondants, mais également ceux qui ne correspondent pas. Dans le cas où il y a des lignes non correspondantes dans une table jointe, les valeurs NULL seront affichées pour elles.
Il existe les deux types suivants de OUTER JOIN dans SQL Server :SQL LEFT JOIN et SQL RIGHT JOIN. Examinons chacun d'eux de plus près.
JOINTURE GAUCHE SQL
SQL LEFT JOIN renvoie tous les enregistrements de la table de gauche (table A) et les enregistrements correspondants de la table de droite (table B). Le résultat est 0 enregistrement du côté droit s'il n'y a pas de correspondance.
La syntaxe de la clause SQL LEFT JOIN est la suivante :
SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
ON tableA.column_name = tableB.column_name;
JOINTURE SQL DROITE
Le mot clé RIGHT JOIN renvoie tous les enregistrements de la table de droite (table2) et les enregistrements correspondants de la table de gauche (table1). Le résultat est 0 enregistrement du côté gauche s'il n'y a pas de correspondance.
La syntaxe de la clause SQL RIGHT JOIN est la suivante :
SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
ON tableA.column_name = tableB.column_name;
JOINTURE EXTERNE COMPLÈTE SQL
Le FULL OUTER JOIN renvoie tous les enregistrements lorsqu'il y a une correspondance dans les enregistrements de la table de gauche (table A) ou de droite (table B).
La syntaxe de la clause SQL FULL OUTER JOIN est la suivante :
SELECT column_name(s)
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column_name = tableB.column_name
WHERE condition;
JOINTURE CROISÉE SQL
SQL CROSS JOIN, également connu sous le nom de JOIN cartésien, récupère toutes les combinaisons de lignes de chaque table. Dans ce type de JOIN, le jeu de résultats est renvoyé en multipliant chaque ligne de la table A par toutes les lignes de la table B si aucune condition supplémentaire n'est introduite.
Pour mieux comprendre les CROSS JOIN, regardons le diagramme de Venn ci-dessous.
La syntaxe du SQL CROSS JOIN est la suivante :
SELECT *
FROM tableA
CROSS JOIN tableB;
Auto-jointure SQL
Une jointure réflexive est une jointure normale, mais la table est jointe à elle-même. Cela implique que chaque ligne du tableau est combinée avec elle-même et avec toutes les autres lignes du tableau.
La syntaxe du SQL self JOIN est la suivante :
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
Conclusion
La connaissance et l'expertise dans l'utilisation des clauses SQL JOIN sont des compétences essentielles de tout DBA ou analyste. Avec sa fonctionnalité exceptionnelle de complétion de code, dbForge Studio for SQL Server peut vous faire gagner du temps et de l'énergie lors de l'écriture des clauses JOIN les plus complexes. Vous n'avez pas besoin de garder à l'esprit des centaines de noms de colonnes ou d'alias, dbForge Studio for SQL demandera une clause SQL JOIN complète. La riche fonctionnalité de l'outil rend la conception de requêtes SQL complexes et la gestion des conditions JOIN rapides, faciles et pratiques.