Kuinka kysellä ja yhdistää tietueita MariaDB JOIN:n avulla
Suhteellisessa tietokannan hallintajärjestelmässä voit verrata eri taulukoiden tietueita keskenään. Tämä mahdollistaa yhteyksien luomisen ja vastaavien arvojen poimimisen kahdesta eri taulukosta. Tämä tehtävä suoritetaan MariaDB:ssä komennolla JOIN. Komentoa käytetään yhdessä SELECT kanssa, ja se voidaan jakaa eri luokkiin. Esittelemme INNER JOIN, LEFT OUTER JOIN ja RIGHT OUTER JOIN tarkemmin alla.
Mikä on syntaksi numerolle JOIN?
Jotta voisit ymmärtää MariaDB:n JOIN eri lauseketta, esitämme ensin lausekkeen perusrakenteen. Tässä on INNER JOINn rakenne:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlKäyttämällä SELECT määrität sarakkeen (tai sarakkeet), jotka haluat sisällyttää. Korvaa paikkamerkki “table_1” ensimmäisellä taulukolla ja “table_2” toisella taulukolla, jonka haluat liittää ensimmäiseen. INNER JOIN vertaa ensimmäisen taulukon jokaista riviä toisen taulukon jokaiseen riviin. Vain vastaavat tietueet (jotka ovat molemmissa taulukoissa) näytetään tulostaulukossa. Epäyhtenevät tietueet jätetään tuloksesta pois.
Kuinka käyttää INNER JOIN MariaDB:ssä
Esitämme yksinkertaisen esimerkin, joka havainnollistaa INNER JOIN toimintaa MariaDB:ssä. Käytämme tietokantaa, jossa on kaksi taulukkoa. Ensimmäisen taulukon nimi on “Customer List” ja toisen “Orders”. Voimme luoda “CustomerList”-taulukon MariaDB CREATE TABLE-komennolla. Taulukko sisältää sarakkeet “Customer ID”, “LastName”, “FirstName”, “City” ja “CreationDate”. Koodi näyttää seuraavalta:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlTä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');sqlSitten luomme taulukon “Orders”. Se sisältää sarakkeet “OrderID”, “ProductID”, “CustomerName” ja “OrderDate”. Koodi näyttää tältä:
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
ProductID INT,
CustomerName VARCHAR(50),
OrderDate DATE
);sqlTäytämme myös tämän taulukon esimerkkilukujen 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');sqlNyt käytämme MariaDB:n INNER JOIN suodattaaksemme asiakkaat, jotka näkyvät asiakasluettelossa ja ovat tehneet tilauksen, joka on listattu Tilaukset-taulukossa. 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;sqlTässä esimerkissä keskitymme asiakastietojen luettelon sukunimeen ja tilausten asiakkaan nimeen. Kun nämä arvot vastaavat toisiaan, ne sisällytetään tuloksiin. Koska asiakkaat Meyer ja Rodman esiintyvät molemmissa taulukoissa, tulos näyttää seuraavalta:
| Asiakastunnus | Asiakkaan nimi | Tilausnumero | Tuotetunnus |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Rodman | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN MariaDB:ssä toimii samanlaisella periaatteella ja käyttää myös lähes identtistä syntaksia. Toisin kuin INNER JOIN, kaikki ensimmäisen tai vasemman taulukon (esimerkissämme ”CustomerList”) tietueet tulostetaan ja vain vastaavat toisen tai oikean taulukon (”orders”) tietueet. Jos toisessa taulukossa ei ole vastaavaa, arvoksi määritetään NULL. Yllä olevan esimerkin perusteella koodi näyttää seuraavalta:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlTä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äinvastoin. Tässä tapauksessa toisen tai oikean taulukon tiedot yhdistetään ensimmäisen tai vasemman taulukon vastaaviin arvoihin. Jos vastaavuutta 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;sqlTulos näyttää tältä:
| Asiakkaan nimi | Tuotetunnus |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |