I et re­la­tions­da­ta­ba­se­sy­stem kan du sam­men­lig­ne da­ta­po­ster i for­skel­li­ge tabeller med hinanden. Dette gør det muligt at oprette for­bin­del­ser og udtrække matchende værdier fra to for­skel­li­ge tabeller. Denne opgave udføres med JOIN i MariaDB. Sætningen bruges i kom­bi­na­tion med SELECT og kan opdeles i for­skel­li­ge ka­te­go­ri­er. Vi vil præ­sen­te­re INNER JOIN, LEFT OUTER JOIN og RIGHT OUTER JOIN mere de­tal­je­ret nedenfor.

Hvad er syntaksen for JOIN?

For at hjælpe dig med at forstå de for­skel­li­ge JOIN i MariaDB vil vi starte med at præ­sen­te­re den grund­læg­gen­de syntaks for sætningen. Her er syntaksen for INNER JOIN:

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

Ved hjælp af SELECT angiver du den eller de kolonner, du vil medtage. Erstat plads­hol­de­ren ‘table_1’ med den første tabel og ‘table_2’ med den anden tabel, som du vil sam­men­fø­je med den første. Operation INNER JOIN sam­men­lig­ner hver række i den første tabel med hver række i den anden tabel. Kun matchende poster (dem, der findes i begge tabeller) vises i re­sul­tat­ta­bel­len. Ikke-matchende poster udelades fra outputtet.

Sådan bruges INNER JOIN i MariaDB

For at de­mon­stre­re, hvordan INNER JOIN fungerer i MariaDB, skal vi se på et enkelt eksempel. Vi bruger en database med to tabeller. Den første tabel hedder ‘Kun­de­li­ste’, og den anden hedder ‘Ordrer’. Vi kan oprette tabellen ‘Kun­de­li­ste’ ved hjælp af MariaDB CREATE TABLE. Denne tabel in­de­hol­der ko­lon­ner­ne ‘Kunde-ID’, ‘Efternavn’, ‘Fornavn’, ‘By’ og ‘Op­ret­tel­ses­da­to’. Sådan ser koden ud:

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

Lad os nu udfylde denne tabel med nogle værdier. Til dette bruger 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

Derefter opretter vi tabellen “Ordrer”. Den in­de­hol­der ko­lon­ner­ne “OrdreID”, “ProduktID”, “Kundens navn” og “Ordredato”. Koden ser således ud:

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

Vi vil også udfylde denne tabel med ek­sem­pel­vær­di­er:

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 bruger vi INNER JOIN til MariaDB til at filtrere de kunder, der vises på kun­de­li­sten og har afgivet en ordre, der er angivet i tabellen Orders. Den til­hø­ren­de kode ser således ud:

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

I dette eksempel fokuserer vi på ef­ter­nav­net i kun­de­li­sten og kundens navn i ordrerne. Når disse værdier stemmer overens, medtages de i re­sul­ta­ter­ne. Da kunderne Meyer og Rodman fo­re­kom­mer i begge tabeller, vil re­sul­ta­tet se således ud:

Kundekode Kundens navn Ordre-ID Produkt-ID
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN i MariaDB fungerer efter et lignende princip og bruger også en næsten identisk syntaks. I mod­sæt­ning til INNER JOIN udskrives dog alle da­ta­po­ster fra den første eller venstre tabel (i vores eksempel ‘Cu­st­o­mer­List’) og kun de matchende da­ta­po­ster fra den anden eller højre tabel (‘orders’). Hvis der ikke er noget til­sva­ren­de i den anden tabel, angives værdien som NULL. Ved hjælp af eksemplet ovenfor ser koden således ud:

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

Dette giver os følgende resultat:

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

RIGHT OUTER JOIN

I MariaDB fungerer RIGHT OUTER JOIN på den modsatte måde. Her kom­bi­ne­res data fra den anden eller højre tabel med matchende værdier fra den første eller venstre tabel. Hvis der ikke er noget match, vil den re­sul­te­ren­de værdi være NULL. Nedenfor er koden:

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

Sådan ser re­sul­ta­tet ud:

Kundens navn Produkt-ID
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Gå til ho­ved­me­nu­en