SQL – JOINs – ενώσεις πινάκων και συσχετίσεις δεδομένων

SQL – JOINs – ενώσεις πινάκων και συσχετίσεις δεδομένων

SQL – JOINs

Όταν πρέπει να επιλέξουμε δεδομένα από δύο πίνακες σε μια βάση δεδομένων για να δημιουργήσουμε ένα πιο σύνθετο αποτέλεσμα, θα πρέπει να κάνουμε μια συνένωση / σύνδεση (join) μεταξύ τους.

Ο πιο κοινός τύπος ένωσης είναι η SQL INNER JOIN (απλή εσωτερική συνένωση / σύνδεση). Μια SQL INNER JOIN σύνδεση, επιστρέφει όλες τις γραμμές από διάφορους πίνακες, όπου φυσικά ικανοποιείται ΚΑΠΟΙΑ ΣΥΝΘΗΚΗ συνένωσης. Οι πίνακες μιας βάσης δεδομένων μπορούν να συσχετιστούν μεταξύ τους με κλειδιά (keys).

Σκοπός είναι να ενωθούν τα δεδομένα μαζί από διάφορους πίνακες, χωρίς να έχουμε επανάληψη όλων των δεδομένων σε κάθε πίνακα.

Υπάρχουν οι εξής διαφορετικές συνενώσεις SQL JOINs που μπορείτε να χρησιμοποιήσετε:

  • INNER JOIN: Επιστρέφει όλες τις γραμμές των πινάκων όπου υπάρχει το κοινό γνώρισμα συνένωσης (εγγραφή) ΚΑΙ στους δύο πίνακες.
  • ——————–
  • OUTER JOINs:
  • ——————–
    • LEFT (OUTER) JOIN: Επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα και τις σχετικές εγγραφές από τον δεξί πίνακα του γνωρίσματος συνένωσης.
    • ——————–
    • RIGHT (OUTER) JOIN: Επιστρέφει όλες τις γραμμές από τον δεξί πίνακα και τις σχετικές εγγραφές από τον αριστερό πίνακα του γνωρίσματος συνένωσης.
    • ——————–
    • FULL (OUTER) JOIN: Επιστρέφει όλες τις γραμμές των πινάκων αρκεί να υπάρχει τουλάχιστον το γνώρισμα συνένωσης σε ΕΝΑΝ από τους πίνακες.

Σημείωση: Τα INNER και OUTER λεκτικά μπορούν και να μην χρησιμοποιηθούν κατά την δημιουργία ερωτημάτων τα οποία και υπονοούνται.

SQL – JOINs – κατανόηση με παράδειγμα δύο πινάκων

Έστω οι παρακάτω δύο πίνακες. Ο αριστερός πίνακας έχει μέσα κατηγορίες και ονομάζεται categories και ο δεξί πίνακας έχει προϊόντα που ανήκουν σε κατηγορίες και ονομάζεται products:

sql programming - join

Εκτελούμε τα παρακάτω ερωτήματα:

Inner Join:

SELECT * FROM categories FULL OUTER JOIN products ON categories.caregory = products.category

Το αποτέλεσμα είναι:

sql programming - join

sql programming - join

Left (Outer) Join:

SELECT * FROM categories FULL OUTER JOIN products ON categories.caregory = products.category

Το αποτέλεσμα είναι:
sql programming - join

sql programming - join

Η Left Outer Join συνένωση παράγει σαν αποτέλεσμα το σύνολο των γραμμών από τον πίνακα categories σε αντιστοιχία με τις γραμμές του πίνακα products. Οι εγγραφές του πίνακα categories που δεν έχουν αντίστοιχες εγγραφές στον πίνακα products θα ανακτηθούν και στις αντίστοιχες εγγραφές του πίνακα products θα δημιουργήσει τα πεδία με τιμές NULL.  Ανάλογο είναι και το Right (Outer) Join.

Full (Outer) Join:

SELECT * FROM categories FULL OUTER JOIN products ON categories.caregory = products.category

Το αποτέλεσμα είναι:

sql programming - join

sql programming - join

Η Full Outer Join συνένωση, παράγει αποτελέσματα με τις κατηγορίες που υπάρχουν και στους δυο πίνακες. Αν για μια κατηγορία δεν υπάρχουν εγγραφές στον δεύτερο πίνακα, τότε οι αντίστοιχες γραμμές του άλλου πίνακα συμπληρώνονται με NULL.

 

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.