I ett re­la­tions­da­ta­bashan­te­rings­sy­stem kan du jämföra da­ta­pos­ter i olika tabeller med varandra. Detta gör det möjligt att skapa kopp­ling­ar och extrahera matchande värden från två olika tabeller. Denna uppgift utförs med JOIN i MariaDB. Uttrycket används i kom­bi­na­tion med SELECT och kan delas in i olika ka­te­go­ri­er. Vi pre­sen­te­rar INNER JOIN, LEFT OUTER JOIN och RIGHT OUTER JOIN mer de­tal­je­rat nedan.

Vad är syntaxen för JOIN?

För att hjälpa dig att förstå de olika JOIN atserna i MariaDB börjar vi med att pre­sen­te­ra satsens grund­läg­gan­de syntax. Här är syntaxen för INNER JOIN:

SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;
sql

Med SELECT anger du den kolumn (eller kolumner) som du vill inkludera. Ersätt plats­hål­la­ren “table_1” med den första tabellen och “table_2” med den andra tabellen som du vill sam­man­fo­ga med den första. Ope­ra­tio­nen INNER JOIN jämför varje rad i den första tabellen med varje rad i den andra tabellen. Endast matchande poster (de som finns i båda ta­bel­ler­na) visas i re­sultatta­bel­len. Icke-matchande poster utesluts från utdata.

Hur man använder INNER JOIN i MariaDB

För att visa hur INNER JOIN fungerar i MariaDB, låt oss titta på ett enkelt exempel. Vi använder en databas som har två tabeller. Den första tabellen heter “Customer List” och den andra “Orders”. Vi kan skapa tabellen “Custo­mer­List” med MariaDB CREATE TABLE. Denna tabell in­ne­hål­ler ko­lum­ner­na “Customer ID”, “LastName”, “FirstName”, “City” och “Cre­a­tion­Da­te”. Så här ser koden ut:

CREATE TABLE CustomerList (
	CustomerID INT PRIMARY KEY,
	LastName VARCHAR(50),
	FirstName VARCHAR(50),
	City VARCHAR(50),
	CreationDate DATE
);
sql

Nu fyller vi tabellen med några värden. För att göra detta använder vi INSERT INTO:

INSERT INTO CustomerList VALUES
(1, 'Smith', 'Martina', 'London', '2022-07-19'),
(2, 'Rodman', 'Daniel', 'Aberdeen', '2023-03-03'),
(3, 'Meyer', 'Peter', 'Cardiff', '2023-07-09'),
(4, 'Garcia', 'Laura', 'Preston', '2023-12-10'),
(5, 'Davis', 'Lisa', 'Bournemouth', '2024-01-17');
sql

Sedan skapar vi tabellen “Orders”. Den in­ne­hål­ler ko­lum­ner­na “OrderID”, “ProductID”, “Custo­mer­Na­me” och “OrderDate”. Koden ser ut så här:

CREATE TABLE Orders (
	OrderID INT AUTO_INCREMENT PRIMARY KEY,
	ProductID INT,
	CustomerName VARCHAR(50),
	OrderDate DATE
);
sql

Vi kommer också att fylla denna tabell med ex­em­pel­vär­den:

INSERT INTO Orders VALUES
(101, 247, 'Jackson', '2024-02-20'),
(102, 332, 'Meyer', '2024-03-03'),
(103, 247, 'Anderson', '2024-03-09'),
(104, 191, 'Rodman', '2024-03-17'),
(105, 499, 'Martinez', '2024-03-17');
sql

Nu använder vi INNER JOIN för MariaDB för att filtrera kunder som finns med i kund­lis­tan och som har lagt en order som finns med i tabellen Orders. Mot­sva­ran­de kod ser ut så här:

SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
sql

I det här exemplet fokuserar vi på ef­ter­nam­net i kund­lis­tan och kund­nam­net i be­ställ­ning­ar­na. När dessa värden matchar in­klu­de­ras de i re­sul­ta­ten. Eftersom kunderna Meyer och Rodman fö­re­kom­mer i båda ta­bel­ler­na skulle re­sul­ta­tet se ut så här:

Kund-ID Kundens namn Order-ID Produkt-ID
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN i MariaDB fungerar enligt en liknande princip och använder också en nästan identisk syntax. Till skillnad från INNER JOIN visas dock alla da­ta­pos­ter från den första eller vänstra tabellen (i vårt exempel ”Custo­mer­List”) och endast de matchande da­ta­pos­ter­na från den andra eller högra tabellen (”orders”). Om det inte finns någon mot­sva­rig­het i den andra tabellen anges värdet som NULL. Med hjälp av exemplet ovan ser koden ut så här:

SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
sql

Detta ger oss följande resultat:

Kundens namn Produkt-ID
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

I MariaDB fungerar RIGHT OUTER JOIN på motsatt sätt. Här kom­bi­ne­ras data från den andra eller högra tabellen med matchande värden från den första eller vänstra tabellen. Om det inte finns någon matchning blir det re­sul­te­ran­de värdet NULL. Nedan följer koden:

SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;
sql

Så här ser re­sul­ta­tet ut:

Kundens namn Produkt-ID
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Gå till huvudmeny