FREE

PostgreSQL Unit 8 - LIKE, LIMIT, NULL

Στο σημερινό δωρεάν μάθημα SQL θα αναλύσουμε μερικούς ακόμα τρόπους που έχουμε διαθέσιμους για να φιλτράρουμε τα δεδομένα που προέρχονται από μια SELECT εντολή.

Όπως ήδη γνωρίζετε, οποιοδήποτε φιλτράρισμα θέλουμε να εφαρμόσουμε αυτό θα γίνει στο WHERE clause. Οι μέχρι τώρα τρόποι που έχουμε δει πρόσθεσαν έξτρα ικανότητες στο φιλτράρισμα των δεδομένων με την προϋπόθεση ότι ήταν γνωστές ολόκληρες οι λέξεις που ψάχναμε. Πως θα ψάξουμε όμως για εκείνες τις χώρες στις οποίες έχουμε πελάτες και τα ονόματα τους ξεκινάνε από Α? Με αυτά που γνωρίζουμε μέχρι τώρα θα ήταν κάπως δύσκολο να υλοποιήσουμε αυτό το query. Όμως εδώ έρχεται η SQL να μας βοηθήσει παρέχοντας μια ακόμα λέξη που είναι η LIKE. Με το LIKE μπορούμε να συγκρίνουμε είτε πολλαπλούς χαρακτήρες οποιασδήποτε μορφής χρησιμοποιώντας το σύμβολο ( % ) ή να συγκρίνουμε ένα χαρακτήρα χρησιμοποιώντας το σύμβολο ( _ ). Με άλλα λόγια ψάχνουμε να βρούμε εκείνα τα δεδομένα που ικανοποιούν κάποιο μοτίβο ή pattern όπως αλλιώς αναφέρεται. Η γενική δομή ενός τέτοιου query μπορεί να έχει την εξής μορφή:

SELECT <column1>, <column2>,…

FROM <table_name>

WHERE <column> LIKE <pattern>;

Πριν όμως δούμε κάποια συγκεκριμένα παραδείγματα ας αναλύσουμε λίγο περισσότερο τι σημαίνουν τα σύμβολα % και _ πως χρησιμοποιούνται από το LIKE.

Όπως αναφέραμε ήδη, το % σημαίνει προσπαθούμε να βρούμε εκείνες τις λέξεις που περιέχουν κανένα, ένα ή περισσότερους χαρακτήρες από το μοτίβο που ψάχνουμε. Για παράδειγμα:

WHERE supplier_name LIKE ‘a%’ – ψάχνουμε όλους τους προμηθευτές που το όνομα τους ξεκινάει από a πεζό χωρίς να μας ενδιαφέρουν οι υπόλοιποι χαρακτήρες που ακολουθούν.

WHERE supplier_name LIKE ‘%e’ – Εδώ ψάχνουμε για εκείνους τους προμηθευτές που το τελευταίο γράμμα του ονόματός τους τελειώνει σε e πεζό.

WHERE supplier_name LIKE ‘%bob%’ – Εδώ ενδιαφερόμαστε για εκείνους τους προμηθευτές που το όνομα τους περιέχει τους χαρακτήρες bob.

WHERE supplier_name LIKE ‘A%i’ – Εδώ ψάχνουμε για εκείνους τους προμηθευτές όπου το όνομα τους ξεκινάει από Α κεφαλαίο, και το τελευταίο γράμμα είναι το i. Οι ενδιάμεσοι χαρακτήρες μπορεί να είναι οτιδήποτε.

Ας δούμε τώρα ένα πιο συγκεκριμένο παράδειγμα. Ας υποθέσουμε λοιπόν ότι θέλουμε να βρούμε όλους τους πελάτες μας που το πρώτο τους όνομα ξεκινάει από D.

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

Ας δούμε λίγο τώρα το άλλο σύμβολο που χρησιμοποιούμε σε συνδυασμό με το LIKE που είναι το underscore ( _ ). Το συγκεκριμένο σύμβολο αντιπροσωπεύει ένα μόνο χαρακτήρα. Κάποια γρήγορα παραδείγματα είναι τα εξής:

WHERE supplier_name LIKE ‘_a%’ – Εδώ ζητάμε ότι ο δεύτερο χαρακτήρας ζητάμε να είναι a. Πριν από το a θα υπάρχει μόνο ένας χαρακτήρας, ενώ μετά από το a μπορεί να υπάρχει οποιοσδήποτε αριθμός χαρακτήρων.

WHERE supplier_name LIKE ‘E_%_’ – Εδώ ψάχνουμε να βρούμε εκείνα τα δεδομένα όπου ο πρώτος χαρακτήρας είναι Ε ενώ μετά από το E υπάρχουν τουλάχιστον δύο ακόμα χαρακτήρες.

Τώρα που εξοικειωθήκαμε με το underscore ( _ ) ας δούμε ένα πιο συγκεκριμένο παράδειγμα. Θέλουμε λοιπόν να βρούμε ποια ονόματα εταιρειών από τους προμηθευτές περιέχουν τα γράμματα ‘or’ σαν δεύτερο και τρίτο χαρακτήρα αντίστοιχα.

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

Τα ονόματα των στηλών που εμφανίζονται στο αποτέλεσμα προέρχονται από τα ονόματα των στηλών του πίνακα από τα οποία προέρχονται. Πολλές φορές όμως θα θέλαμε να δώσουμε λίγο πιο επεξηγηματικά ονόματα στα ονόματα των στηλών όπως εμφανίζονται στο αποτέλεσμα. Αυτή η διαδικασία φυσικά δεν επηρεάζει ή αλλάζει τίποτα στις στήλες όπως είναι δηλωμένες στην βάση. Είναι αποκλειστικά και μόνο για λόγους reporting και κατανόησης από τον τελικό χρήστη.

Πως όμως δηλώνουμε ποιο θα είναι το καινούργιο όνομα της στήλης που θα εμφανιστεί σαν αποτέλεσμα στο SELECT query? Βάζοντας την λέξη ‘AS’ αμέσως μετά από την στήλη και δηλώνοντας το καινούργιο όνομα.

SELECT <column1> AS alias_name

FROM <table_name>;

Αν νομίζετε ότι το να δώσουμε ένα ψευδώνυμο σε μια στήλη δεν είναι χρήσιμο, ας δούμε ένα συγκεκριμένο παράδειγμα που θα σας κάνει να αλλάξετε γνώμη. Θέλουμε λοιπόν να βρούμε πόσα χρήματα έχει κερδίσει η εταιρεία ανά παραγγελία αν είναι γνωστή η τιμή του προϊόντος όπως και η ποσότητα. Το πρόβλημα είναι πολύ απλό – πολλαπλασιάζουμε το untiprice με το quantity ανά παραγγελία.

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

Το αποτέλεσμα είναι σωστό αλλά το όνομα που έχει δώσει στη στήλη το γραφικό περιβάλλον της PostgreSQL δεν είναι και τόσο κατατοπιστικό. Με άλλα λόγια, κοιτάζοντας την στήλη με τους αριθμούς δεν θα γνωρίζουμε τι ακριβώς αντιπροσωπεύουν. Εδώ είναι λοιπόν που χρειάζεται να δώσουμε ένα ψευδώνυμο στην στήλη.

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

Τώρα αν θέλουμε να εμφανιστεί το όνομα της στήλης ακριβώς όπως το γράφουμε τότε δεν έχετε παρά να το βάλετε μέσα σε διπλά quotes ( “ ”).

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

Με τα alias που δίνουμε στις στήλες πρέπει να προσέξουμε γιατί δεν μπορούμε να χρησιμοποιήσουμε αυτά τα ονόματα μέσα στο SELECT όπου θέλουμε. Το ψευδώνυμο που δίνουμε στη στήλη μπορούμε να το χρησιμοποιήσουμε στο ORDER BY αλλά δεν μπορούμε να το χρησιμοποιήσουμε στο FROM, στο WHERE ή στο HAVING (ακόμα δεν το έχουμε μάθει).

Ας δούμε πρώτα ένα query που δεν θα δουλέψει:

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

Τώρα ας δούμε ένα query που δουλεύει:

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

Μέχρι τώρα, ζητούσαμε να δούμε όλα τα δεδομένα από έναν πίνακα. Ακόμα και όταν χρησιμοποιούμε κάποιο φίλτρο αυτό θα εφαρμοστεί σε όλα τα δεδομένα. Υπάρχουν κάποιες φορές που δεν ενδιαφερόμαστε να δούμε όλα τα δεδομένα του πίνακα, αλλά ένα μέρος των δεδομένων. Για παράδειγμα, σε μια βάση που περιέχει καταχωρήσεις χιλιάδων πελατών ενδιαφερόμαστε να δούμε μόνο τους 10 πρώτους ίσως γιατί θέλουμε να πάρουμε μια ιδέα από ένα δείγμα δεδομένων πριν εφαρμόσουμε την λογική μας σε ολόκληρο τον πίνακα. Για να περιορίσουμε το σύνολο των δεδομένων που εμφανίζονται στο τελικό αποτέλεσμα χρησιμοποιούμε την εντολή LIMIT. Η γενική δομή της εντολής είναι η εξής:

SELECT <column1>,…

FROM <table_name>

LIMIT number;

Ένα ποιο ρεαλιστικό σενάριο ίσως είναι να ζητήσουμε να βρούμε τις τρεις ποιο ακριβές παραγγελίες που έχουν υλοποιηθεί.

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

Ένα τελευταίο θέμα που θέλω να καλύψουμε σε αυτό το δωρεάν σεμινάριο SQL είναι το NULL. Η βάση αναγνωρίζει το null σαν κάτι άγνωστο. Δεν είναι το μηδέν, ούτε και το spacebar γιατί αυτά έχουν κάποιο αριθμό ASCII που περιγράφονται. Κατά την εισαγωγή δεδομένων εάν δεν ξέρουμε κάποια τιμή και απλά δεν την καταχωρήσουμε, η βάση θα βάλει null για το συγκεκριμένο πεδίο στον πίνακα. Τα null κατά την εισαγωγή δεδομένων θα μας απασχολήσουνε αργότερα. Για τώρα θα πρέπει να γνωρίζουμε αν ένας πίνακας περιέχει null τιμές ή όχι. Αυτός είναι ένας έλεγχος που κάνουμε συχνά πριν τρέξουμε κάποια πολύπλοκά queries στην βάση.

Για να αξιολογήσουμε σωστά εάν ένα πεδίο έχει null τιμή ή όχι μπορούμε να χρησιμοποιήσουμε την λογική IS NULL ή IS NOT NULL.

SELECT column_names

FROM <table_name>

WHERE column IS NULL;

ή

SELECT column_names

FROM <table_name>

WHERE column IS NOT NULL;

Και πως συνδυάζουμε το null με την λογική ενός query? Σκεφτείτε λοιπόν ότι θέλετε να βρείτε για πόσους πελάτες δεν έχουμε καταχωρήσει την περιοχή. Με άλλα λόγια για πόσους πελάτες η τιμή της περιοχής είναι Null.

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