Sådan forespørges og flettes poster ved hjælp af MariaDB JOIN
I et relationsdatabasesystem kan du sammenligne dataposter i forskellige tabeller med hinanden. Dette gør det muligt at oprette forbindelser og udtrække matchende værdier fra to forskellige tabeller. Denne opgave udføres med JOIN i MariaDB. Sætningen bruges i kombination med SELECT og kan opdeles i forskellige kategorier. Vi vil præsentere INNER JOIN, LEFT OUTER JOIN og RIGHT OUTER JOIN mere detaljeret nedenfor.
Hvad er syntaksen for JOIN?
For at hjælpe dig med at forstå de forskellige JOIN i MariaDB vil vi starte med at præsentere den grundlæggende 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;sqlVed hjælp af SELECT angiver du den eller de kolonner, du vil medtage. Erstat pladsholderen ‘table_1’ med den første tabel og ‘table_2’ med den anden tabel, som du vil sammenføje med den første. Operation INNER JOIN sammenligner 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 resultattabellen. Ikke-matchende poster udelades fra outputtet.
Sådan bruges INNER JOIN i MariaDB
For at demonstrere, 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 ‘Kundeliste’, og den anden hedder ‘Ordrer’. Vi kan oprette tabellen ‘Kundeliste’ ved hjælp af MariaDB CREATE TABLE. Denne tabel indeholder kolonnerne ‘Kunde-ID’, ‘Efternavn’, ‘Fornavn’, ‘By’ og ‘Oprettelsesdato’. Sådan ser koden ud:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlLad 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');sqlDerefter opretter vi tabellen “Ordrer”. Den indeholder kolonnerne “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
);sqlVi vil også udfylde denne tabel med eksempelværdier:
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 bruger vi INNER JOIN til MariaDB til at filtrere de kunder, der vises på kundelisten og har afgivet en ordre, der er angivet i tabellen Orders. Den tilhørende kode ser således ud:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlI dette eksempel fokuserer vi på efternavnet i kundelisten og kundens navn i ordrerne. Når disse værdier stemmer overens, medtages de i resultaterne. Da kunderne Meyer og Rodman forekommer i begge tabeller, vil resultatet 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 modsætning til INNER JOIN udskrives dog alle dataposter fra den første eller venstre tabel (i vores eksempel ‘CustomerList’) og kun de matchende dataposter fra den anden eller højre tabel (‘orders’). Hvis der ikke er noget tilsvarende 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;sqlDette 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 kombineres 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 resulterende værdi være NULL. Nedenfor er koden:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlSådan ser resultatet ud:
| Kundens navn | Produkt-ID |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |