FREE

PostgreSQL Unit 3 - Using WHERE with Strings, Numbers and Dates

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

Συνήθως δεν επιθυμούμε να δούμε όλα τα δεδομένα ενός πίνακα αλλά μια συγκεκριμένη ομάδα αυτών. Για παράδειγμα, από τον πίνακα customers θέλουμε να δούμε την λίστα με τους πελάτες που βρίσκονται μόνο στην Γερμανία. Για να το πετύχουμε αυτό, θα πρέπει να προσθέσουμε μια ακόμα γραμμή SQL κώδικα στο Query μας που να περιέχει την λέξη κλειδί WHERE. Η γραμμή που περιέχει το WHERE στην ουσία περιγράφει την συνθήκη με την οποία θα φιλτράρουμε τα δεδομένα πριν εμφανιστούν στην οθόνη μας.

Επειδή αρχίζουμε και προσθέτουμε πολλές καινούργιες εντολές στο SQL αίτημα μας προς την βάση, θα πρέπει να γνωρίζουμε και που ανήκουν συντακτικά αυτές οι εντολές. Υπάρχει συγκεκριμένη σειρά με την οποία θα πρέπει να συνδυάζονται οι εντολές. Η γενική δομή λοιπόν που θα έχει ένα αίτημα μας προς την βάση που περιέχει και το WHERE θα είναι ως εξής:

SELECT <coloumn1>,<column2>,…

FROM <table_name>

WHERE <condition>;

Στην πιο απλή αναζήτηση που κάνουμε σε έναν πίνακα, θα πρέπει να φιλτράρουμε τα δεδομένα ανάλογα με το data type που είναι γραμμένα. Δηλαδή, υπάρχουν στήλες σε πίνακες που περιέχουν αριθμούς, άλλες που περιέχουν ονόματα και άλλες ημερομηνίες. Θα πρέπει λοιπόν όταν χρησιμοποιούμε το WHERE να φιλτράρουμε τα δεδομένα με το σωστό data type.

Στο πρώτο μας παράδειγμα, θέλουμε να δούμε από τον πίνακα customers, το όνομα της εταιρείας και το όνομα του ατόμου με το οποίο μπορούμε να έρθουμε σε επικοινωνία για εκείνους τους πελάτες που βρίσκονται στην πόλη του Λονδίνου.

Για να πετύχουμε κάτι τέτοιο, πρέπει στο WHERE να αναζητήσουμε στην στήλη city με το String ‘London’ όπως δείχνει το παρακάτω παράδειγμα.

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

Η γενική φόρμουλα για να χρησιμοποιήσουμε το WHERE είναι να ξεκινήσουμε το clause με την λέξη κλειδί WHERE, αμέσως μετά να ονομάσουμε την στήλη ή τις στήλες με την οποία θα φιλτράρουμε τα δεδομένα και αμέσως μετά την τιμή την οποία ψάχνουμε. Στο συγκεκριμένο παράδειγμα ψάχνουμε για το String όνομα London. Για να ψάξουμε για ένα όνομα που είναι αποθηκευμένο στην στήλη του πίνακα σαν String θα πρέπει να το περικλύσουμε μέσα σε single quotes ( ‘ ‘).

Αν τώρα θέλουμε να καταλάβουμε λίγο περισσότερο το τι ακριβώς συμβαίνει όταν εκτελούμε ένα τέτοιο query μπορούμε να δώσουμε την εξής εξήγηση: Το query ξεκινάει πάντα πρώτα από το from για να μπορέσει να βρει τον πίνακα. Όταν βρεθεί ο πίνακας, εκτελείται το SELECT και όλα τα δεδομένα από τις στήλες company_name και contact_name φορτώνονται στην μνήμη. Τέλος, στα δεδομένα που φορτώθηκαν από το SELECT γίνεται ένα φιλτράρισμα με βάση την συνθήκη που έχουμε ορίσει στο WHERE. Στο παράδειγμα μας, θα ψάξουμε την στήλη city και όπου βρεθεί το όνομα London θα δούμε το αντίστοιχο company_name και contact_name.

Αν τώρα θέλουμε να καταλάβουμε λίγο περισσότερο το τι ακριβώς συμβαίνει όταν εκτελούμε ένα τέτοιο query μπορούμε να δώσουμε την εξής εξήγηση: Το query ξεκινάει πάντα πρώτα από το from για να μπορέσει να βρει τον πίνακα. Όταν βρεθεί ο πίνακας, εκτελείται το SELECT και όλα τα δεδομένα από τις στήλες company_name και contact_name φορτώνονται στην μνήμη. Τέλος, στα δεδομένα που φορτώθηκαν από το SELECT γίνεται ένα φιλτράρισμα με βάση την συνθήκη που έχουμε ορίσει στο WHERE. Στο παράδειγμα μας, θα ψάξουμε την στήλη city και όπου βρεθεί το όνομα London θα δούμε το αντίστοιχο company_name και contact_name.

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

Αν και φαίνεται πολύ απλή η χρήση του WHERE με τα Strings υπάρχει κάποιος κίνδυνος όμως να μην λειτουργήσει σωστά. Αυτό συμβαίνει γιατί η PostgreSQL θα αναζητήσει το String μέσα στην στήλη του πίνακα ακριβώς όπως το έχετε γράψει. Αν λοιπόν εσείς ζητάτε το london με πεζούς χαρακτήρες αλλά στην πραγματικότητα το όνομα έχει γραφτεί στην βάση με το πρώτο γράμμα κεφαλαίο τότε δεν θα πάρετε κανένα αποτέλεσμα.

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

Φυσικά όλες οι βάσεις έχουν το ίδιο πρόβλημα και έχει ήδη λυθεί αυτό με την χρήση των functions που μας προσφέρει η ίδια η βάση. Για αυτό θα μιλήσουμε σε μελλοντικές ενότητες. Απλά για τώρα προσέξτε πως φιλτράρετε τα δεδομένα σας όταν περιέχουν Strings.

Εκτός από το σύμβολο της ισότητας, μπορούμε να χρησιμοποιήσουμε και άλλους Comparison Operators. Ο παρακάτω πίνακας σας δίνει μια εικόνα των επιλογών που έχετε.

Standard Comparison Operators

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

Φυσικά, οι comparison operators έχουν περισσότερη αξία όταν χρησιμοποιηθούν στο WHERE clause για να φιλτράρουν στήλες με αριθμητικά δεδομένα. Στο επόμενο παράδειγμα θέλουμε να βρούμε από τον πίνακα orders πόσες παραγγελίες έχουν πραγματοποιηθεί από τον εργαζόμενο με id = 3.

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

Όταν έχουμε αριθμούς δεν χρησιμοποιούμε single quotes. Προσέξτε αυτή την διαφορά από το προηγούμενο παράδειγμα.

Ας δούμε ακόμα ένα παράδειγμα όπου αυτή την φορά χρησιμοποιούμε το >= comparison operator. Ψάχνουμε να βρούμε τον αριθμό παραγγελίας, τον αριθμό του προϊόντος και την ποσότητα για εκείνες τις παραγγελίες όπου η ποσότητα είναι μεγαλύτερη ή ίση του αριθμού 20.

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

Την ίδια λογική ακριβώς μπορούμε να την εφαρμόσουμε και σε στήλες όπου υπάρχουν ημερομηνίες. Για να φιλτράρουμε τα δεδομένα με βάση μια ημερομηνία μπορούμε να χρησιμοποιήσουμε όλους τους comparison operators που έχουμε μάθει όμως η ημερομηνία χρειάζεται να είναι μέσα σε single quotes. Επίσης ανάλογα με το internalization και τα settings που έχουν χρησιμοποιηθεί κατά την εγκατάσταση της βάσης θα είναι διαφορετικός ο τρόπος εγγραφής της ημερομηνίας στον πίνακα. Στην Northwind βάση δεν έχουμε επιλέξει καμία τροποποίηση όσο αφορά τα settings οπότε χρησιμοποιείται ο τρόπος εγγραφής της χώρας USA.

Ας δούμε λοιπόν ένα παράδειγμα όπου ζητάμε να δούμε τον αριθμό παραγγελίας και τον κωδικό του πελάτη για τις παραγγελίας που έγιναν από τις 12 Αυγούστου του 1996 και μετά.

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