FREE

PostgreSQL Unit 10 - FULL and SELF JOIN

Στο σημερινό δωρεάν μάθημα SQL και PostgreSQL Administration θα δούμε το FULL και το SELF Join. Με αυτά τα δύο κλείνουμε την αναφορά μας όσο αφορά τους τρόπους τους οποίους έχουμε διαθέσιμους για να λάβουμε δεδομένα από πολλαπλούς πίνακες.

Το Full Join είναι ένας συνδυασμός του LEFT και του RIGHT JOIN. Δηλαδή μας φέρνει όλα τα δεδομένα από τον πρώτο πίνακα και όλα τα δεδομένα από τον δεύτερο πίνακα.

Αν θέλαμε να δούμε το γενικό τρόπο σύνταξης ενός Full Join θα είχαμε το εξής:

SELECT column_names

FROM table1

FULL JOIN table2 ON table1.column_name = table2.column_name;

Που μπορούμε όμως να εφαρμόσουμε ένα τέτοιο query? Ας δούμε ξανά το σενάριο με το οποίο είχαμε ασχοληθεί στην προηγούμενη ενότητα όπου ζητούσαμε να βρούμε το όνομα του πελάτη (company_name) και τον κωδικό παραγγελίας (order_id). Ένα Full Join, σε αυτό το σενάριο, θα μας έδινε σαν αποτέλεσμα τους πελάτες που δεν έχουν παραγγείλει ακόμα αλλά και τις παραγγελίες που δεν έχουν πελάτες, ίσως γιατί διαγράφτηκε ο πελάτης από την βάση αλλά έμειναν οι παραγγελίες στον πίνακα οπότε χρειάζεται να τις βρούμε και να τις διαγράψουμε και αυτές. Με άλλα λόγια θα μπορούμε να βρούμε αυτό που ονομάζουμε orphaned records.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Τώρα ας δούμε τι ακριβώς κάνει το Self Join και πως το χρησιμοποιούμε. Ας θεωρήσουμε λίγο το εξής θεωρητικό σενάριο. Ας υποθέσουμε λοιπόν ότι στην βάση μας έχουμε έναν πίνακα που περιέχει τρεις στήλες – Employee ID, Employee Name και Reports to.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Θέλουμε λοιπόν να βρούμε ποιο είναι το όνομα του manager του Michail. Πως θα το βρούμε αυτό? Στην θεωρία πρέπει να βρούμε (α) πρώτα το id του manager στον οποίον αναφέρεται ο Michail (εδώ είναι 20) και (β) με βάση το Id να ψάξουμε να βρούμε το όνομα του Manager (George). Δηλαδή θα πρέπει να κάνουμε δύο φορές αναζήτηση στον ίδιο πίνακα για πάρουμε το ζητούμενο αποτέλεσμα. Το shelf join είναι αυτό που μπορεί να μας βοηθήσει στο συγκεκριμένο σενάριο. Στην ουσία αυτό που κάνει (άλλωστε το λέει και το όνομα του) κάνει join έναν πίνακα στον εαυτό του.

Όπως ήδη έχουμε δει από τα προηγούμενα joins που έχουμε αναλύσει, κάθε στήλη σε ένα join ορίζεται από όνομα του πίνακα και το όνομα της στήλης. Σε ένα shelf join θα πρέπει να δώσουμε Alias ονόματα στον ίδιο πίνακα για να έχει νόημα η συνθήκη της σύγκρισης.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Η βασική δομή σύνταξης ενός shelf join query είναι η εξής:

SELECT column_names

FROM table AS t1

JOIN table AS t2 ΟΝ t1.column=t2.column

WHERE condition;

Ας δούμε τώρα πως μπορούμε να εφαρμόσουμε πρακτικά το self join. Θα συνεχίσουμε με το ίδιο παράδειγμα. Οπότε λοιπόν ψάχνουμε να βρούμε ποιος είναι o manager για κάθε εργαζόμενο. Επίσης θα πρέπει να ταξινομήσουμε αλφαβητικά το αποτέλεσμα. Με όσα έχουμε αναφέρει μέχρι τώρα λογικά θα γράφαμε το εξής query:

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL