FREE

PostgreSQL Unit 4 - Combining WHERE with Logical Operators, BETWEEN and IN

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

Στην ουσία επιθυμούμε να συνδυάσουμε δύο ή και περισσότερες συνθήκες στο ίδιο WHERE clause. Για να το πετύχουμε αυτό, πρέπει να χρησιμοποιήσουμε Logical Operators (AND, OR, NOT).

Ξεκινώντας από το AND, θα πρέπει και οι δύο συνθήκες να είναι true για να επιλεχτεί το record (δηλαδή η γραμμή με τα δεδομένα από τον πίνακα). Η βασική δομή ενός SELECT που περιέχει WHERE με Logical Operators είναι κάπως έτσι:

SELECT <column1>, <column2>,…

FROM <table_name>

WHERE condition1 AND condition2 AND condition3…;

Ας δούμε ένα πιο συγκεκριμένο παράδειγμα. Ας υποθέσουμε πως ενδιαφερόμαστε να δούμε ποιος είναι ο συνολικός αριθμός των παραγγελιών (πόσες παραγγελίες δηλαδή) έχουν σταλθεί στην Γερμανία και το κόστος μεταφορά τους ήταν περισσότερο από 100 δολάρια. Άρα τα δεδομένα που θα εμφανιστούν στο αποτέλεσμα πρέπει να καλύπτουν ταυτόχρονα δύο προϋποθέσεις: Πρώτον, τα προϊόντα θα έχουν σταλθεί στην Γερμανία και δεύτερον τα έξοδα μεταφορά τους θα πρέπει να είναι πάνω από 100 δολάρια.

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

Τώρα, αν θέλετε να δείτε τι διαφορά έκανε η προσθήκη του Logical Operator στα δεδομένα μας, μπορείτε πολύ απλά να αφαιρέσετε την δεύτερη συνθήκη, συμπεριλαμβανομένου και του Logical Operator και εκτελέστε το Query ακόμα μια φορά.

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

Όταν τώρα χρησιμοποιούμε τον Logical Operator OR, η βασική δομή του Query παραμένει σχεδόν η ίδια με την προηγούμενη που μόλις είδαμε με την μόνη αλλαγή ότι θα πρέπει να αντικαταστήσουμε το AND με το OR.

SELECT <column1>, <column2>,…

FROM <table_name>

WHERE condition1 OR condition2 OR condition3…;

Ας δούμε ένα πιο συγκεκριμένο παράδειγμα. Θέλουμε να ξέρουμε πόσους πελάτες (τον συνολικό αριθμό των πελατών) έχουμε από ΑΜΕΡΙΚΗ και ΚΑΝΑΔΑ μαζί. Το OR απαιτεί μια από τις δύο συνθήκες να είναι True για να επιστρέψει δεδομένα σε εμάς. Οπότε είτε έχουμε πελάτες μόνο στην ΑΜΕΡΙΚΗ, είτε μόνο στον ΚΑΝΑΔΑ είτε και στις δύο χώρες, θα δούμε το συνολικό αριθμό των πελατών.

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

Η ερώτηση που ίσως έχετε αυτή την στιγμή είναι αν μπορούμε να χρησιμοποιήσουμε δύο ή και περισσότερες συνθήκες είτε με το AND είτε με το OR. Φυσικά και μπορούμε να χρησιμοποιήσουμε περισσότερες συνθήκες. Ας δούμε ένα παράδειγμα όπου ζητάμε να βρούμε τον συνολικό αριθμό των πελάτων που έχουμε από τρεις χώρες: ΑΜΕΡΙΚΗ, ΒΡΑΖΙΛΙΑ, και ΑΡΓΕΝΤΙΝΗ.

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

Ο τρίτος και τελευταίος Logical Operator είναι το NOT. Το NOT δεν μπορεί να δεχτεί πολλαπλές συνθήκες. Αυτό που κάνει είναι να αντιστρέφει την λογική σε μια μόνο συνθήκη. Η γενική δομή ενός SELECT που περιέχει NOT Logical Operator είναι η εξής:

SELECT <column1>, <column2>,…

FROM <table_name>

WHERE NOT <condition>;

Ας δούμε ένα παράδειγμα που θα κάνει πιο ξεκάθαρη την χρήση του NOT. Θέλουμε λοιπόν να μάθουμε πόσους πελάτες έχουμε συνολικά εκτός από αυτούς που βρίσκονται στην Γαλλία. Με άλλα λόγια πόσοι πελάτες δεν είναι στην Γαλλία. Προσέξτε λίγο την λογική στο query. Πρώτα γράφουμε πόσοι πελάτες είναι στην Γαλλία (country=’FRANCE’) και μετά αντιστρέφουμε την λογική προσθέτοντας το ΝΟΤ μπροστά από την συνθήκη (NOT country=’FRANCE’).

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

Το επόμενο βήμα, που είναι και το πιο λογικό, θα ήταν να συνδυάσουμε όλους ή τουλάχιστον δύο Logical Operators στο ίδιο WHERE clause. Μια γενική δομή ενός τέτοιου Query θα ήταν ως εξής:

SELECT <column1>, <column2>,…

FROM <table_name>

WHERE (<condition1> AND<condition2>) OR <condition3>;

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

Ας δούμε ένα παράδειγμα που χρησιμοποιεί δύο διαφορετικούς Logical Operators. Θέλουμε λοιπόν να βρούμε πόσες παραγγελίες έχουν σταλθεί στην ΓΕΡΜΑΝΙΑ με ταχυδρομικά έξοδα που είναι είτε λιγότερο από 50 δολάρια είτε περισσότερο από 175 δολάρια.

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

Ας αλλάξουμε λίγο το παραπάνω παράδειγμα, και αντί για (freight<50 OR freight>175) αναζητάμε τις παραγγελίες που έχουν κόστος αποστολής μεγαλύτερο από 50 δολάρια και μικρότερο από 175 δολάρια. Δηλαδή αλλάζουμε την συνθήκη ως εξής: (freight>=50 AND freight<=175). Δεν υπάρχει τίποτα το ιδιαίτερο σε αυτό το Query απλά αναζητάμε διαφορετική πληροφορία.

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

Αν τώρα θέλουμε να αντικαταστήσουμε την συνθήκη freight>=50 AND freight<=175 θα μπορούσαμε να χρησιμοποιήσουμε την λέξη BETWEEN. Όπως δηλώνει και το όνομα της εντολής όποτε την χρησιμοποιούμε δηλώνουμε ότι αναζητάμε οποιονδήποτε, αριθμό, όνομα ή ημερομηνία μέσα στο εύρος τιμών που έχουμε δηλώσει. Το αποτέλεσμα είναι ακριβώς το ίδιο.

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

Κάτι αντίστοιχο μπορούμε να κάνουμε και όταν έχουμε OR Logical Operators. Αντί να ψάχνουμε για μεμονωμένες τιμές μέσω μιας σειράς από OR συνθηκών (WHERE id=2 OR id=3 OR id=4 OR id=10 OR id=20) μπορούμε να χρησιμοποιήσουμε το IN (WHERE id IN(2,3,4,10,20).

Στο παρακάτω παράδειγμα ψάχνουμε να βρούμε πόσοι προμηθευτές στο σύνολο τους υπάρχουν από ΓΕΡΜΑΝΙΑ, ΙΣΠΑΝΙΑ και ΙΤΑΛΙΑ.

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