Suh­teel­li­ses­sa tie­to­kan­nan hal­lin­ta­jär­jes­tel­mäs­sä voit verrata eri tau­lu­koi­den tietueita keskenään. Tämä mah­dol­lis­taa yh­teyk­sien luomisen ja vas­taa­vien arvojen poi­mi­mi­sen kahdesta eri tau­lu­kos­ta. Tämä tehtävä suo­ri­te­taan MariaDB:ssä ko­men­nol­la JOIN. Komentoa käytetään yhdessä SELECT kanssa, ja se voidaan jakaa eri luokkiin. Esit­te­lem­me INNER JOIN, LEFT OUTER JOIN ja RIGHT OUTER JOIN tarkemmin alla.

Mikä on syntaksi numerolle JOIN?

Jotta voisit ymmärtää MariaDB:n JOIN eri lause­ket­ta, esitämme ensin lausek­keen pe­rus­ra­ken­teen. Tässä on INNER JOINn rakenne:

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

Käyt­tä­mäl­lä SELECT määrität sarakkeen (tai sarakkeet), jotka haluat si­säl­lyt­tää. Korvaa paik­ka­merk­ki “table_1” en­sim­mäi­sel­lä tau­lu­kol­la ja “table_2” toisella tau­lu­kol­la, jonka haluat liittää en­sim­mäi­seen. INNER JOIN vertaa en­sim­mäi­sen taulukon jokaista riviä toisen taulukon jokaiseen riviin. Vain vastaavat tietueet (jotka ovat mo­lem­mis­sa tau­lu­kois­sa) näytetään tu­los­tau­lu­kos­sa. Epäyh­te­ne­vät tietueet jätetään tu­lok­ses­ta pois.

Kuinka käyttää INNER JOIN MariaDB:ssä

Esitämme yk­sin­ker­tai­sen esimerkin, joka ha­vain­nol­lis­taa INNER JOIN toimintaa MariaDB:ssä. Käytämme tie­to­kan­taa, jossa on kaksi taulukkoa. En­sim­mäi­sen taulukon nimi on “Customer List” ja toisen “Orders”. Voimme luoda “Cus­to­mer­List”-taulukon MariaDB CREATE TABLE-ko­men­nol­la. Taulukko sisältää sarakkeet “Customer ID”, “LastName”, “FirstName”, “City” ja “Crea­tion­Da­te”. Koodi näyttää seu­raa­val­ta:

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

Täytetään nyt tämä taulukko arvoilla. Tätä varten käytämme 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

Sitten luomme taulukon “Orders”. Se sisältää sarakkeet “OrderID”, “ProductID”, “Cus­to­mer­Na­me” ja “OrderDate”. Koodi näyttää tältä:

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

Täytämme myös tämän taulukon esi­merk­ki­lu­ku­jen avulla:

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

Nyt käytämme MariaDB:n INNER JOIN suo­dat­taak­sem­me asiakkaat, jotka näkyvät asia­kas­luet­te­los­sa ja ovat tehneet tilauksen, joka on listattu Tilaukset-tau­lu­kos­sa. Vastaava koodi näyttää tältä:

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

Tässä esi­mer­kis­sä kes­ki­tym­me asia­kas­tie­to­jen luettelon su­ku­ni­meen ja tilausten asiakkaan nimeen. Kun nämä arvot vastaavat toisiaan, ne si­säl­ly­te­tään tuloksiin. Koska asiakkaat Meyer ja Rodman esiin­ty­vät mo­lem­mis­sa tau­lu­kois­sa, tulos näyttää seu­raa­val­ta:

Asia­kas­tun­nus Asiakkaan nimi Ti­laus­nu­me­ro Tuo­te­tun­nus
3 Meyer 102 332
2 Rodman 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN MariaDB:ssä toimii sa­man­lai­sel­la pe­ri­aat­teel­la ja käyttää myös lähes ident­tis­tä syntaksia. Toisin kuin INNER JOIN, kaikki en­sim­mäi­sen tai vasemman taulukon (esi­mer­kis­säm­me ”Cus­to­mer­List”) tietueet tu­los­te­taan ja vain vastaavat toisen tai oikean taulukon (”orders”) tietueet. Jos toisessa tau­lu­kos­sa ei ole vastaavaa, arvoksi mää­ri­te­tään NULL. Yllä olevan esimerkin pe­rus­teel­la koodi näyttää seu­raa­val­ta:

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

Tämä antaa meille seuraavan tuloksen:

Asiakkaan nimi Tuotteen tunnus
Smith NULL
Rodman 191
Meyer 332
Garcia NULL
Davis NULL

RIGHT OUTER JOIN

MariaDB:ssä RIGHT OUTER JOIN toimii päin­vas­toin. Tässä ta­pauk­ses­sa toisen tai oikean taulukon tiedot yh­dis­te­tään en­sim­mäi­sen tai vasemman taulukon vas­taa­viin arvoihin. Jos vas­taa­vuut­ta ei löydy, tuloksena oleva arvo on NULL. Alla on koodi:

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

Tulos näyttää tältä:

Asiakkaan nimi Tuo­te­tun­nus
NULL 247
Meyer 332
NULL 247
Rodman 191
NULL 499
Siirry pää­va­lik­koon