# Πώς να αναζητήσετε και να συγχωνεύσετε εγγραφές χρησιμοποιώντας το MariaDB JOIN

Σε ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων, μπορείτε να συγκρίνετε μεταξύ τους εγγραφές δεδομένων σε διαφορετικούς πίνακες. Αυτό καθιστά δυνατή τη δημιουργία συνδέσεων και την εξαγωγή ταιριαστών τιμών από δύο διαφορετικούς πίνακες. Αυτή η εργασία εκτελείται με `JOIN` στο MariaDB. Η δήλωση χρησιμοποιείται σε συνδυασμό με `SELECT` και μπορεί να χωριστεί σε διαφορετικές κατηγορίες. Παρακάτω θα παρουσιάσουμε με περισσότερες λεπτομέρειες `INNER JOIN`, `LEFT OUTER JOIN` και `RIGHT OUTER JOIN`.

## Ποια είναι η σύνταξη για `JOIN`;

Για να σας βοηθήσουμε να κατανοήσετε τις διάφορες `JOIN` δηλώσεις στο MariaDB, θα ξεκινήσουμε παρουσιάζοντας τη βασική σύνταξη της δήλωσης. Ακολουθεί η σύνταξη για `INNER JOIN`:

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

Χρησιμοποιώντας `SELECT`, καθορίζετε τη στήλη (ή τις στήλες) που θέλετε να συμπεριλάβετε. Αντικαταστήστε το σύμβολο κράτησης θέσης «table\_1» με τον πρώτο πίνακα και το «table\_2» με τον δεύτερο πίνακα που θέλετε να ενώσετε με τον πρώτο. Η λειτουργία `INNER JOIN` **συγκρίνει κάθε σειρά στον πρώτο πίνακα με κάθε σειρά στον δεύτερο πίνακα**. Μόνο τα ταιριάζοντα αρχεία (αυτά που υπάρχουν και στους δύο πίνακες) θα εμφανίζονται στον πίνακα αποτελεσμάτων. Οι μη ταιριαστές εγγραφές εξαιρούνται από το αποτέλεσμα.

## Πώς να χρησιμοποιήσετε `INNER JOIN` στο MariaDB

Για να δείξουμε πώς λειτουργεί `INNER JOIN` στο MariaDB, ας δούμε ένα απλό παράδειγμα. Θα χρησιμοποιήσουμε μια βάση δεδομένων που έχει δύο πίνακες. Ο πρώτος πίνακας ονομάζεται «Λίστα πελατών» και ο δεύτερος «Παραγγελίες». Μπορούμε να δημιουργήσουμε τον πίνακα «Λίστα πελατών» χρησιμοποιώντας [το MariaDB CREATE TABLE](https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/mariadb-dimioyrgia-pinaka/). Αυτός ο πίνακας περιλαμβάνει τις στήλες «Αναγνωριστικό πελάτη», «Επώνυμο», «Όνομα», «Πόλη» και «Ημερομηνία δημιουργίας». Ο κώδικας έχει την εξής μορφή:

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

Τώρα, ας συμπληρώσουμε αυτόν τον πίνακα με μερικές τιμές. Για να το κάνουμε αυτό, χρησιμοποιούμε `INSERT INTO`:

```sql
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');
```

Στη συνέχεια, δημιουργούμε τον πίνακα «Παραγγελίες». Αυτός περιέχει τις στήλες «OrderID», «ProductID», «CustomerName» και «OrderDate». Ο κώδικας έχει την εξής μορφή:

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

Θα συμπληρώσουμε επίσης αυτόν τον πίνακα με δείγματα τιμών:

```sql
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');
```

Τώρα, θα χρησιμοποιήσουμε `INNER JOIN` για το MariaDB για να φιλτράρουμε τους πελάτες που **εμφανίζονται στη λίστα πελατών και έχουν υποβάλει μια παραγγελία** που περιλαμβάνεται στον πίνακα Παραγγελίες. Ο αντίστοιχος κώδικας έχει την εξής μορφή:

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

Σε αυτό το παράδειγμα, εστιάζουμε στο επώνυμο στη λίστα πελατών και στο όνομα πελάτη στις παραγγελίες. Όταν αυτές οι τιμές ταιριάζουν, περιλαμβάνονται στα αποτελέσματα. Δεδομένου ότι οι πελάτες Meyer και Rodman εμφανίζονται και στους δύο πίνακες, το αποτέλεσμα θα έχει την εξής μορφή:

<table>
  <thead>
    <tr>
      <th>Αριθμός πελάτη</th>
      <th>Όνομα πελάτη</th>
      <th>Αριθμός παραγγελίας</th>
      <th>Αναγνωριστικό προϊόντος</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>3</td>
      <td>Meyer</td>
      <td>102</td>
      <td>332</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Ρόντμαν</td>
      <td>104</td>
      <td>191</td>
    </tr>
  </tbody>
</table>

## `LEFT OUTER JOIN`

`LEFT OUTER JOIN` στο MariaDB λειτουργεί σύμφωνα με μια παρόμοια αρχή και χρησιμοποιεί επίσης μια σχεδόν πανομοιότυπη σύνταξη. Σε αντίθεση με `INNER JOIN`, ωστόσο, εξάγονται **όλα τα αρχεία δεδομένων από τον πρώτο ή αριστερό πίνακα** (στο παράδειγμά μας «CustomerList») και μόνο τα αντίστοιχα αρχεία δεδομένων από τον δεύτερο ή δεξιό πίνακα («orders»). Εάν δεν υπάρχει αντίστοιχο στον δεύτερο πίνακα, η τιμή **ορίζεται ως NULL**. Χρησιμοποιώντας το παραπάνω παράδειγμα, ο κώδικας έχει την εξής μορφή:

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

Αυτό μας δίνει το ακόλουθο αποτέλεσμα:

<table>
  <thead>
    <tr>
      <th>Όνομα πελάτη</th>
      <th>Αναγνωριστικό προϊόντος</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Smith</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>Rodman</td>
      <td>191</td>
    </tr>
    <tr>
      <td>Meyer</td>
      <td>332</td>
    </tr>
    <tr>
      <td>Γκαρσία</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>Ντέιβις</td>
      <td>NULL</td>
    </tr>
  </tbody>
</table>

## `RIGHT OUTER JOIN`

Στο MariaDB, `RIGHT OUTER JOIN` λειτουργεί με τον αντίθετο τρόπο. Εδώ, **τα δεδομένα από τον δεύτερο ή δεξιό πίνακα συνδυάζονται με τις αντίστοιχες τιμές από τον πρώτο ή αριστερό πίνακα**. Εάν δεν υπάρχει αντιστοιχία, η τελική τιμή θα είναι NULL. Ακολουθεί ο κώδικας:

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

Αυτό είναι το αποτέλεσμα:

<table>
  <thead>
    <tr>
      <th>Όνομα πελάτη</th>
      <th>Αναγνωριστικό προϊόντος</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>NULL</td>
      <td>247</td>
    </tr>
    <tr>
      <td>Meyer</td>
      <td>332</td>
    </tr>
    <tr>
      <td>NULL</td>
      <td>247</td>
    </tr>
    <tr>
      <td>Rodman</td>
      <td>191</td>
    </tr>
    <tr>
      <td>NULL</td>
      <td>499</td>
    </tr>
  </tbody>
</table>

Tip Στον Ψηφιακό Οδηγό μας θα βρείτε πολλά χρήσιμα σεμινάρια και άρθρα για το MariaDB. Για παράδειγμα, υπάρχει μια σύγκριση μεταξύ MariaDB και MySQL, ένα σεμινάριο για την εγκατάσταση του MariaDB και οδηγίες για το πώς να επαναφέρετε τον κωδικό πρόσβασης root του MariaDB.


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/syndesi-mariadb/](https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/syndesi-mariadb/) for AI/LLM consumption.