Πώς να αναζητήσετε και να συγχωνεύσετε εγγραφές χρησιμοποιώντας το MariaDB JOIN
Σε ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων, μπορείτε να συγκρίνετε μεταξύ τους εγγραφές δεδομένων σε διαφορετικούς πίνακες. Αυτό καθιστά δυνατή τη δημιουργία συνδέσεων και την εξαγωγή ταιριαστών τιμών από δύο διαφορετικούς πίνακες. Αυτή η εργασία εκτελείται με JOIN στο MariaDB. Η δήλωση χρησιμοποιείται σε συνδυασμό με SELECT και μπορεί να χωριστεί σε διαφορετικές κατηγορίες. Παρακάτω θα παρουσιάσουμε με περισσότερες λεπτομέρειες INNER JOIN, LEFT OUTER JOIN και RIGHT OUTER JOIN.
Ποια είναι η σύνταξη για JOIN;
Για να σας βοηθήσουμε να κατανοήσετε τις διάφορες JOIN δηλώσεις στο MariaDB, θα ξεκινήσουμε παρουσιάζοντας τη βασική σύνταξη της δήλωσης. Ακολουθεί η σύνταξη για INNER JOIN:
SELECT column
FROM table_1
INNER JOIN table_2
ON table_1.column = table_2.column;sqlΧρησιμοποιώντας SELECT, καθορίζετε τη στήλη (ή τις στήλες) που θέλετε να συμπεριλάβετε. Αντικαταστήστε το σύμβολο κράτησης θέσης «table_1» με τον πρώτο πίνακα και το «table_2» με τον δεύτερο πίνακα που θέλετε να ενώσετε με τον πρώτο. Η λειτουργία INNER JOIN συγκρίνει κάθε σειρά στον πρώτο πίνακα με κάθε σειρά στον δεύτερο πίνακα. Μόνο τα ταιριάζοντα αρχεία (αυτά που υπάρχουν και στους δύο πίνακες) θα εμφανίζονται στον πίνακα αποτελεσμάτων. Οι μη ταιριαστές εγγραφές εξαιρούνται από το αποτέλεσμα.
Πώς να χρησιμοποιήσετε INNER JOIN στο MariaDB
Για να δείξουμε πώς λειτουργεί INNER JOIN στο MariaDB, ας δούμε ένα απλό παράδειγμα. Θα χρησιμοποιήσουμε μια βάση δεδομένων που έχει δύο πίνακες. Ο πρώτος πίνακας ονομάζεται «Λίστα πελατών» και ο δεύτερος «Παραγγελίες». Μπορούμε να δημιουργήσουμε τον πίνακα «Λίστα πελατών» χρησιμοποιώντας το MariaDB CREATE TABLE. Αυτός ο πίνακας περιλαμβάνει τις στήλες «Αναγνωριστικό πελάτη», «Επώνυμο», «Όνομα», «Πόλη» και «Ημερομηνία δημιουργίας». Ο κώδικας έχει την εξής μορφή:
CREATE TABLE CustomerList (
CustomerID INT PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
City VARCHAR(50),
CreationDate DATE
);sqlΤώρα, ας συμπληρώσουμε αυτόν τον πίνακα με μερικές τιμές. Για να το κάνουμε αυτό, χρησιμοποιούμε 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Στη συνέχεια, δημιουργούμε τον πίνακα «Παραγγελίες». Αυτός περιέχει τις στήλες «OrderID», «ProductID», «CustomerName» και «OrderDate». Ο κώδικας έχει την εξής μορφή:
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');sqlΤώρα, θα χρησιμοποιήσουμε INNER JOIN για το MariaDB για να φιλτράρουμε τους πελάτες που εμφανίζονται στη λίστα πελατών και έχουν υποβάλει μια παραγγελία που περιλαμβάνεται στον πίνακα Παραγγελίες. Ο αντίστοιχος κώδικας έχει την εξής μορφή:
SELECT CustomerList.CustomerID, CustomerList.LastName, Orders.OrderID, Orders.ProductID
FROM CustomerList
INNER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlΣε αυτό το παράδειγμα, εστιάζουμε στο επώνυμο στη λίστα πελατών και στο όνομα πελάτη στις παραγγελίες. Όταν αυτές οι τιμές ταιριάζουν, περιλαμβάνονται στα αποτελέσματα. Δεδομένου ότι οι πελάτες Meyer και Rodman εμφανίζονται και στους δύο πίνακες, το αποτέλεσμα θα έχει την εξής μορφή:
| Αριθμός πελάτη | Όνομα πελάτη | Αριθμός παραγγελίας | Αναγνωριστικό προϊόντος |
|---|---|---|---|
| 3 | Meyer | 102 | 332 |
| 2 | Ρόντμαν | 104 | 191 |
LEFT OUTER JOIN
LEFT OUTER JOIN στο MariaDB λειτουργεί σύμφωνα με μια παρόμοια αρχή και χρησιμοποιεί επίσης μια σχεδόν πανομοιότυπη σύνταξη. Σε αντίθεση με INNER JOIN, ωστόσο, εξάγονται όλα τα αρχεία δεδομένων από τον πρώτο ή αριστερό πίνακα (στο παράδειγμά μας «CustomerList») και μόνο τα αντίστοιχα αρχεία δεδομένων από τον δεύτερο ή δεξιό πίνακα («orders»). Εάν δεν υπάρχει αντίστοιχο στον δεύτερο πίνακα, η τιμή ορίζεται ως NULL. Χρησιμοποιώντας το παραπάνω παράδειγμα, ο κώδικας έχει την εξής μορφή:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
LEFT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlΑυτό μας δίνει το ακόλουθο αποτέλεσμα:
| Όνομα πελάτη | Αναγνωριστικό προϊόντος |
|---|---|
| Smith | NULL |
| Rodman | 191 |
| Meyer | 332 |
| Γκαρσία | NULL |
| Ντέιβις | NULL |
RIGHT OUTER JOIN
Στο MariaDB, RIGHT OUTER JOIN λειτουργεί με τον αντίθετο τρόπο. Εδώ, τα δεδομένα από τον δεύτερο ή δεξιό πίνακα συνδυάζονται με τις αντίστοιχες τιμές από τον πρώτο ή αριστερό πίνακα. Εάν δεν υπάρχει αντιστοιχία, η τελική τιμή θα είναι NULL. Ακολουθεί ο κώδικας:
SELECT CustomerList.LastName, Orders.ProductID
FROM CustomerList
RIGHT OUTER JOIN Orders
ON CustomerList.LastName = Orders.CustomerName;sqlΑυτό είναι το αποτέλεσμα:
| Όνομα πελάτη | Αναγνωριστικό προϊόντος |
|---|---|
| NULL | 247 |
| Meyer | 332 |
| NULL | 247 |
| Rodman | 191 |
| NULL | 499 |