In een re­la­ti­o­neel da­ta­ba­se­be­heer­sys­teem kunt u ge­ge­vens­re­cords in ver­schil­len­de tabellen met elkaar ver­ge­lij­ken. Hierdoor is het mogelijk om verbanden te leggen en over­een­ko­men­de waarden uit twee ver­schil­len­de tabellen te ex­tra­he­ren. Deze taak wordt in MariaDB uit­ge­voerd met JOIN. De in­struc­tie wordt gebruikt in com­bi­na­tie met SELECT en kan worden on­der­ver­deeld in ver­schil­len­de ca­te­go­rie­ën. Hieronder gaan we dieper in op INNER JOIN, LEFT OUTER JOIN en RIGHT OUTER JOIN.

Wat is de syntaxis voor JOIN?

Om u te helpen de ver­schil­len­de JOIN in MariaDB te begrijpen, beginnen we met het pre­sen­te­ren van de ba­sis­syn­taxis van de statement. Hier is de syntaxis voor INNER JOIN:

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

Met SELECT geeft u de kolom (of kolommen) op die u wilt opnemen. Vervang de tij­de­lij­ke aan­dui­ding ‘table_1’ door de eerste tabel en ‘table_2’ door de tweede tabel die u met de eerste wilt sa­men­voe­gen. De bewerking INNER JOIN ver­ge­lijkt elke rij in de eerste tabel met elke rij in de tweede tabel. Alleen over­een­ko­men­de records (die in beide tabellen voorkomen) worden weer­ge­ge­ven in de re­sul­ta­ten­ta­bel. Niet-over­een­ko­men­de records worden uit de uitvoer geweerd.

Hoe gebruik je INNER JOIN in MariaDB

Om te laten zien hoe INNER JOIN werkt in MariaDB, bekijken we een eenvoudig voorbeeld. We gebruiken een database met twee tabellen. De eerste tabel heet ‘Customer List’ en de tweede ‘Orders’. We kunnen de tabel ‘Cus­to­mer­List’ maken met MariaDB CREATE TABLE. Deze tabel bevat de kolommen ‘Customer ID’, ‘LastName’, ‘FirstName’, ‘City’ en ‘Cre­a­ti­on­Da­te’. De code ziet er als volgt uit:

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

Laten we deze tabel nu met enkele waarden vullen. Hiervoor gebruiken we 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

Ver­vol­gens maken we de tabel ‘Orders’. Deze bevat de kolommen ‘OrderID’, ‘ProductID’, ‘Cus­to­mer­Na­me’ en ‘OrderDate’. De code ziet er als volgt uit:

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

We gaan deze tabel ook vullen met voor­beeld­waar­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 gebruiken we INNER JOIN voor MariaDB om te filteren op klanten die in de klan­ten­lijst voorkomen en een be­stel­ling hebben geplaatst die in de tabel Orders staat. De bij­be­ho­ren­de code ziet er als volgt uit:

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

In dit voorbeeld richten we ons op de ach­ter­naam in de klan­ten­lijst en de klantnaam in de be­stel­lin­gen. Wanneer deze waarden over­een­ko­men, worden ze opgenomen in de re­sul­ta­ten. Aangezien de klanten Meyer en Rodman in beide tabellen voorkomen, zou de uitvoer er als volgt uitzien:

Klant-ID Klantnaam Be­stel­num­mer Product-ID
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN in MariaDB werkt volgens een soort­ge­lijk principe en gebruikt ook een vrijwel identieke syntaxis. In te­gen­stel­ling tot INNER JOIN worden echter alle ge­ge­vens­re­cords uit de eerste of lin­ker­ta­bel (in ons voorbeeld ‘Cus­to­mer­List’) uit­ge­voerd en alleen de over­een­ko­men­de ge­ge­vens­re­cords uit de tweede of rech­ter­ta­bel (‘orders’). Als er geen equi­va­lent in de tweede tabel is, wordt de waarde ge­spe­ci­fi­ceerd als NULL. Aan de hand van het bo­ven­staan­de voorbeeld ziet de code er als volgt uit:

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

Dit levert het volgende resultaat op:

Naam klant Product-ID
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

In MariaDB werkt RIGHT OUTER JOIN op de te­gen­over­ge­stel­de manier. Hier worden gegevens uit de tweede of rech­ter­ta­bel ge­com­bi­neerd met over­een­ko­men­de waarden uit de eerste of lin­ker­ta­bel. Als er geen over­een­komst is, is de re­sul­te­ren­de waarde NULL. Hieronder staat de code:

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

Dit is hoe de uitvoer eruitziet:

Naam klant Product-ID
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Ga naar hoofdmenu