Hoe records opvragen en samenvoegen met MariaDB JOIN
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;sqlMet 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
);sqlLaten 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');sqlVervolgens 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
);sqlWe 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');sqlNu 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;sqlIn 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;sqlDit 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;sqlDit is hoe de uitvoer eruitziet:
| Naam klant | Product-ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |