In dit artikel gaan we SQL Server JOIN's onder de loep nemen. We zullen alle ondersteunde SQL Server JOIN-typen beoordelen met syntaxis, visuele illustraties en voorbeelden.
Zoals we allemaal weten, vormen tabelgegevens de kern van elke SQL-database. Om het effectief te gebruiken, moeten databasebeheerders regelmatig records uit verschillende tabellen halen op basis van bepaalde voorwaarden. En dat is precies waar SQL JOIN's voor zijn.
JOIN is een SQL-clausule die wordt gebruikt om . op te halen de gegevens uit twee of meer tabellen op basis van logische relaties tussen de tabellen. Joins geven aan hoe SQL Server gegevens uit de ene tabel moet gebruiken om de rijen in een andere tabel te selecteren.
Verschillende soorten JOIN's in SQL
SQL Server ondersteunt verschillende soorten JOIN's, waaronder INNER JOIN , ZELF AANMELDEN , CROSS JOIN , en OUTER JOIN . Elk type join definieert in feite de manier waarop twee tabellen in een query aan elkaar zijn gerelateerd. OUTER JOINS kunnen op hun beurt worden onderverdeeld in LEFT OUTER JOINS , RIGHT OUTER JOINS , en VOLLEDIGE OUTER JOINS .
Om beter te laten zien hoe de JOIN's werken, zullen we twee tabellen maken.
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
);
Vervolgens moeten we de gegevens in de gemaakte tabellen invoegen.
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');
SQL INNER JOIN
INNER JOIN-instructie retourneert records die overeenkomende waarden in beide tabellen hebben.
De syntaxis van de SQL INNER JOIN-clausule is als volgt:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
SQL OUTER JOINs
In tegenstelling tot INNER JOIN-clausules, retourneren OUTER JOINs niet alleen overeenkomende records, maar ook niet-overeenkomende records. Als er niet-overeenkomende rijen in een samengevoegde tabel zijn, worden de NULL-waarden ervoor weergegeven.
Er zijn de volgende twee typen OUTER JOIN in SQL Server:SQL LEFT JOIN en SQL RIGHT JOIN. Laten we ze allemaal eens nader bekijken.
SQL LEFT JOIN
SQL LEFT JOIN retourneert alle records uit de linkertabel (tabel A) en de overeenkomende records uit de rechtertabel (tabel B). Het resultaat is 0 records van de rechterkant als er geen overeenkomst is.
De syntaxis van de SQL LEFT JOIN-clausule is als volgt:
SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
ON tableA.column_name = tableB.column_name;
SQL RECHTS AANMELDEN
Het sleutelwoord RIGHT JOIN retourneert alle records uit de rechtertabel (tabel2) en de overeenkomende records uit de linkertabel (tabel1). Het resultaat is 0 records van de linkerkant als er geen overeenkomst is.
De syntaxis van de SQL RIGHT JOIN-clausule is als volgt:
SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
ON tableA.column_name = tableB.column_name;
SQL VOLLEDIGE OUTER JOIN
De FULL OUTER JOIN retourneert alle records wanneer er een overeenkomst is in de linker (tabel A) of rechter (tabel B) tabelrecords.
De syntaxis van de SQL FULL OUTER JOIN-clausule is als volgt:
SELECT column_name(s)
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column_name = tableB.column_name
WHERE condition;
SQL CROSS JOIN
SQL CROSS JOIN, ook wel cartesiaanse JOIN genoemd, haalt alle combinaties van rijen uit elke tabel op. In dit type JOIN wordt de resultatenset geretourneerd door elke rij van tabel A te vermenigvuldigen met alle rijen in tabel B als er geen aanvullende voorwaarde wordt geïntroduceerd.
Om CROSS JOINs beter te begrijpen, laten we eens kijken naar het Venn-diagram hieronder.
De syntaxis van de SQL CROSS JOIN is als volgt:
SELECT *
FROM tableA
CROSS JOIN tableB;
SQL Self JOIN
Een self-join is een gewone JOIN, maar de tafel is samengevoegd met zichzelf. Dit houdt in dat elke rij van de tabel wordt gecombineerd met zichzelf en met elke andere rij van de tabel.
De syntaxis van de SQL self JOIN is als volgt:
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
Conclusie
De kennis en expertise in het gebruik van SQL JOIN-clausules zijn essentiële vaardigheden van elke DBA of analist. dbForge Studio voor SQL Server ., met zijn uitstekende code-aanvullingsfunctionaliteit, kan je tijd en moeite besparen bij het schrijven van zelfs de meest complexe JOIN-clausules. U hoeft geen honderden kolomnamen of aliassen in gedachten te houden, dbForge Studio for SQL zal een volledige SQL JOIN-clausule vragen. De uitgebreide functionaliteit van de tool maakt het ontwerpen van complexe SQL-query's en het beheren van JOIN-voorwaarden snel, gemakkelijk en handig.