I denne artikel skal vi se nærmere på SQL Server JOINs. Vi vil gennemgå alle understøttede SQL Server JOIN-typer med syntaks, visuelle illustrationer og eksempler.
Som vi alle ved, er tabeldata kernen i enhver SQL-database. For at bruge det effektivt skal databaseadministratorer regelmæssigt udtrække poster fra flere tabeller baseret på visse betingelser. Og det er præcis, hvad SQL JOINs er til.
JOIN er en SQL-sætning, der bruges til at hente den data fra to eller flere tabeller baseret på logiske relationer mellem tabellerne. Joins angiver, hvordan SQL Server skal bruge data fra én tabel til at vælge rækkerne i en anden tabel.
Forskellige typer JOINs i SQL
SQL Server understøtter forskellige typer JOINs, inklusive INNER JOIN , DELTAG SELV , KRYDSJOIN , og YDRE JOIN . Faktisk definerer hver jointype den måde, to tabeller er relateret til i en forespørgsel. YDRE JOINS kan igen opdeles i LEFT OUTER JOINS , HØJRE YDRE JOINS , og FULD ydre JOINS .
For bedre at demonstrere, hvordan JOIN'erne fungerer, vil vi oprette to tabeller.
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
);
Dernæst skal vi indsætte dataene i de oprettede tabeller.
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-sætning returnerer poster, der har matchende værdier i begge tabeller.
Syntaksen for SQL INNER JOIN-sætningen er som følger:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
SQL YDRE JOINS
I modsætning til INNER JOIN-klausuler returnerer OUTER JOINs ikke kun matchende poster, men også ikke-matchende. Hvis der er ikke-matchende rækker i en samlet tabel, vil NULL-værdierne blive vist for dem.
Der er følgende to typer OUTER JOIN i SQL Server:SQL LEFT JOIN og SQL RIGHT JOIN. Lad os se nærmere på hver af dem.
SQL VENSTRE JOIN
SQL LEFT JOIN returnerer alle poster fra den venstre tabel (tabel A) og de matchende poster fra den højre tabel (tabel B). Resultatet er 0 poster fra højre side, hvis der ikke er nogen match.
Syntaksen for SQL LEFT JOIN-udtrykket er som følger:
SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
ON tableA.column_name = tableB.column_name;
SQL HØJRE JOIN
Nøgleordet RIGHT JOIN returnerer alle poster fra den højre tabel (tabel2), og de matchende poster fra den venstre tabel (tabel1). Resultatet er 0 poster fra venstre side, hvis der ikke er nogen match.
Syntaksen for SQL RIGHT JOIN-sætningen er som følger:
SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
ON tableA.column_name = tableB.column_name;
SQL FULD YDRE JOIN
FULD YDRE JOIN returnerer alle poster, når der er et match i venstre (tabel A) eller højre (tabel B) tabelposter.
Syntaksen for SQL FULL OUTER JOIN-udtrykket er som følger:
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, også kendt som en kartesisk JOIN, henter alle kombinationer af rækker fra hver tabel. I denne type JOIN returneres resultatsættet ved at gange hver række i tabel A med alle rækker i tabel B, hvis der ikke er indført nogen yderligere betingelse.
For bedre at forstå CROSS JOINs, lad os tage et kig på Venn-diagrammet nedenfor.
Syntaksen for SQL CROSS JOIN er som følger:
SELECT *
FROM tableA
CROSS JOIN tableB;
SQL Self JOIN
En selv-join er en almindelig JOIN, men bordet er sammenføjet med sig selv. Dette indebærer, at hver række i tabellen er kombineret med sig selv og med hver anden række i tabellen.
Syntaksen for SQL self JOIN er som følger:
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
Konklusion
Viden og ekspertise i at bruge SQL JOIN-klausuler er væsentlige færdigheder hos enhver DBA eller analytiker. Med sin fantastiske kodefuldførelsesfunktionalitet, dbForge Studio til SQL Server kan spare din tid og kræfter på at skrive selv de mest komplekse JOIN-klausuler. Du behøver ikke at have hundredvis af kolonnenavne eller aliaser i tankerne, dbForge Studio til SQL vil bede om en fuld SQL JOIN-klausul. Værktøjets rige funktionalitet gør det hurtigt, nemt og bekvemt at designe komplekse SQL-forespørgsler og administrere JOIN-betingelser.