sql >> Databasteknik >  >> RDS >> Database

SQL JOINs handledning med exempel

I den här artikeln kommer vi att ta en närmare titt på SQL Server JOINs. Vi kommer att granska alla SQL Server JOIN-typer som stöds med syntax, visuella illustrationer och exempel.

Som vi alla vet är tabelldata kärnan i vilken SQL-databas som helst. För att använda det effektivt måste databasadministratörer regelbundet extrahera poster från flera tabeller baserat på vissa villkor. Och det är precis vad SQL JOINs är till för.

JOIN är en SQL-sats som används för att hämta den data från två eller flera tabeller baserat på logiska relationer mellan tabellerna. Joins anger hur SQL Server ska använda data från en tabell för att välja rader i en annan tabell.

Olika typer av JOINs i SQL

SQL Server stöder olika typer av JOIN, inklusive INNER JOIN , GÅ MED SJÄLV , KORS-GÅ MED och OUTER JOIN . Faktum är att varje kopplingstyp definierar hur två tabeller är relaterade i en fråga. OUTER JOINS kan i sin tur delas in i LEFT OUTER JOINS , HÖGER YTTRE JOINS , och FULLSTÄNDIG YTTRE JOINS .

För att bättre visa hur JOINs fungerar kommer vi att skapa två 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
);

Därefter måste vi infoga data i de skapade tabellerna.

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-satsen returnerar poster som har matchande värden i båda tabellerna.

Syntaxen för SQL INNER JOIN-satsen är följande:

SELECT column_name(s)
FROM table1
INNER JOIN table2
 ON table1.column_name = table2.column_name;

SQL OUTER JOINS

I motsats till INNER JOIN-klausuler returnerar OUTER JOINs inte bara matchande poster utan även icke-matchande. Om det finns icke-matchande rader i en sammanfogad tabell, kommer NULL-värdena att visas för dem.

Det finns följande två typer av OUTER JOIN i SQL Server:SQL LEFT JOIN och SQL RIGHT JOIN. Låt oss ta en närmare titt på var och en av dem.

SQL LEFT JOIN

SQL LEFT JOIN returnerar alla poster från den vänstra tabellen (tabell A) och de matchande posterna från den högra tabellen (tabell B). Resultatet är 0 poster från höger sida om det inte finns någon matchning.

Syntaxen för SQL LEFT JOIN-satsen är följande:

SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
 ON tableA.column_name = tableB.column_name;

SQL RIGHT JOIN

Nyckelordet RIGHT JOIN returnerar alla poster från den högra tabellen (tabell2) och de matchande posterna från den vänstra tabellen (tabell1). Resultatet är 0 poster från vänster sida om det inte finns någon matchning.

Syntaxen för SQL RIGHT JOIN-satsen är följande:

SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
 ON tableA.column_name = tableB.column_name;

SQL FULL YTTRE JOIN

FULL OUTER JOIN returnerar alla poster när det finns en matchning i vänster (tabell A) eller höger (tabell B) tabellposter.

Syntaxen för SQL FULL OUTER JOIN-satsen är följande:

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, även känd som en kartesisk JOIN, hämtar alla kombinationer av rader från varje tabell. I denna typ av JOIN returneras resultatuppsättningen genom att multiplicera varje rad i tabell A med alla rader i tabell B om inget ytterligare villkor införs.

För att bättre förstå CROSS JOINs, låt oss ta en titt på Venn-diagrammet nedan.

Syntaxen för SQL CROSS JOIN är följande:

SELECT * 
FROM tableA 
CROSS JOIN tableB;

SQL Self JOIN

En self-join är en vanlig JOIN, men bordet är sammanfogat med sig själv. Detta innebär att varje rad i tabellen kombineras med sig själv och med varannan rad i tabellen.

Syntaxen för SQL self JOIN är följande:

SELECT column_name(s)
FROM table1 T1, table1 T2
  WHERE condition;

Slutsats

Kunskapen och expertisen i att använda SQL JOIN-klausuler är viktiga färdigheter för alla DBA eller analytiker. Med dess fantastiska kodkompletteringsfunktionalitet, dbForge Studio for SQL Server kan spara tid och ansträngning på att skriva även de mest komplexa JOIN-klausulerna. Du behöver inte ha hundratals kolumnnamn eller alias i åtanke, dbForge Studio för SQL kommer att uppmana en fullständig SQL JOIN-klausul. Verktygets rika funktionalitet gör det snabbt, enkelt och bekvämt att designa komplexa SQL-frågor och hantera JOIN-villkor.


  1. Överväganden kring kolumnordning i index och sorteringar

  2. Importera .csv-fil till ett Oracle Forms-program

  3. Jag glömde lösenordet som jag angav under postgres-installationen

  4. Hur hittar man aktuell transaktionsnivå?