In een relationeel databasebeheersysteem kunt u gegevensrecords in verschillende tabellen met elkaar vergelijken. Hierdoor is het mogelijk om verbanden te leggen en overeenkomende waarden uit twee verschillende tabellen te extraheren. Deze taak wordt in MariaDB uitgevoerd met JOIN. De instructie wordt gebruikt in combinatie met SELECT en kan worden onderverdeeld in verschillende categorieë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 verschillende JOIN in MariaDB te begrijpen, beginnen we met het presenteren van de basissyntaxis 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 tijdelijke aanduiding ‘table_1’ door de eerste tabel en ‘table_2’ door de tweede tabel die u met de eerste wilt samenvoegen. De bewerking INNER JOIN vergelijkt elke rij in de eerste tabel met elke rij in de tweede tabel. Alleen overeenkomende records (die in beide tabellen voorkomen) worden weergegeven in de resultatentabel. Niet-overeenkomende 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 ‘CustomerList’ maken met MariaDB CREATE TABLE. Deze tabel bevat de kolommen ‘Customer ID’, ‘LastName’, ‘FirstName’, ‘City’ en ‘CreationDate’. 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

Vervolgens maken we de tabel ‘Orders’. Deze bevat de kolommen ‘OrderID’, ‘ProductID’, ‘CustomerName’ 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 voorbeeldwaarden:

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 klantenlijst voorkomen en een bestelling hebben geplaatst die in de tabel Orders staat. De bijbehorende 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 achternaam in de klantenlijst en de klantnaam in de bestellingen. Wanneer deze waarden overeenkomen, worden ze opgenomen in de resultaten. Aangezien de klanten Meyer en Rodman in beide tabellen voorkomen, zou de uitvoer er als volgt uitzien:

Klant-ID Klantnaam Bestelnummer Product-ID
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN in MariaDB werkt volgens een soortgelijk principe en gebruikt ook een vrijwel identieke syntaxis. In tegenstelling tot INNER JOIN worden echter alle gegevensrecords uit de eerste of linkertabel (in ons voorbeeld ‘CustomerList’) uitgevoerd en alleen de overeenkomende gegevensrecords uit de tweede of rechtertabel (‘orders’). Als er geen equivalent in de tweede tabel is, wordt de waarde gespecificeerd als NULL. Aan de hand van het bovenstaande 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 tegenovergestelde manier. Hier worden gegevens uit de tweede of rechtertabel gecombineerd met overeenkomende waarden uit de eerste of linkertabel. Als er geen overeenkomst is, is de resulterende 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