sql >> Database >  >> RDS >> Database

SQL JOINs-zelfstudie met voorbeelden

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.


  1. Hoe kan ik een enkele opdracht vanaf de opdrachtregel via sql plus geven?

  2. Hoe het aantal van elke afzonderlijke waarde in een kolom te krijgen?

  3. Verwijzen naar een tabel in een ander schema waarbij de schemanaam wordt weggelaten

  4. Escape-functie voor reguliere expressie of LIKE-patronen