I ett relationsdatabashanteringssystem kan du jämföra dataposter i olika tabeller med varandra. Detta gör det möjligt att skapa kopplingar och extrahera matchande värden från två olika tabeller. Denna uppgift utförs med JOIN i MariaDB. Uttrycket används i kombination med SELECT och kan delas in i olika kategorier. Vi presenterar INNER JOIN, LEFT OUTER JOIN och RIGHT OUTER JOIN mer detaljerat 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 presentera satsens grundläggande 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 platshållaren “table_1” med den första tabellen och “table_2” med den andra tabellen som du vill sammanfoga med den första. Operationen 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 tabellerna) visas i resultattabellen. 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 “CustomerList” med MariaDB CREATE TABLE. Denna tabell innehåller kolumnerna “Customer ID”, “LastName”, “FirstName”, “City” och “CreationDate”. 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 innehåller kolumnerna “OrderID”, “ProductID”, “CustomerName” 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 exempelvärden:

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 kundlistan och som har lagt en order som finns med i tabellen Orders. Motsvarande 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å efternamnet i kundlistan och kundnamnet i beställningarna. När dessa värden matchar inkluderas de i resultaten. Eftersom kunderna Meyer och Rodman förekommer i båda tabellerna skulle resultatet 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 dataposter från den första eller vänstra tabellen (i vårt exempel ”CustomerList”) och endast de matchande dataposterna från den andra eller högra tabellen (”orders”). Om det inte finns någon motsvarighet 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 kombineras 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 resulterande 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 resultatet ut:

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