MySQL WHERE Ρήτρα: ΚΑΙ, Ή, IN, NOT IN Παράδειγμα ερωτήματος
⚡ Έξυπνη Σύνοψη
MySQL Η ρήτρα WHERE φιλτράρει τις γραμμές πριν φτάσουν στο σύνολο αποτελεσμάτων, εφαρμόζοντας ακριβή κριτήρια στις εντολές SELECT, UPDATE και DELETE. Η κατανόηση των τελεστών AND, OR, IN, NOT IN και σύγκρισης επιτρέπει στους αρχάριους να ανακτούν ακριβώς τις εγγραφές που απαιτεί ένα ερώτημα.

Τι είναι η ρήτρα WHERE MySQL?
WHERE, in MySQL είναι μια λέξη-κλειδί που χρησιμοποιείται για τον καθορισμό των ακριβών κριτηρίων των δεδομένων ή των γραμμών που θα επηρεαστούν από την καθορισμένη πρόταση SQL. Ο όρος WHERE μπορεί να χρησιμοποιηθεί με εντολές SQL όπως INSERT, UPDATE, SELECT και DELETE για φιλτράρισμα εγγραφών και εκτέλεση διαφόρων λειτουργιών στα δεδομένα.
Εξετάσαμε τον τρόπο αναζήτησης δεδομένων από α βάσεις δεδομένων χρησιμοποιώντας τη δήλωση SELECT στο προηγούμενο σεμινάριο. Η δήλωση SELECT επέστρεψε όλα τα αποτελέσματα από τον πίνακα της βάσης δεδομένων που ζητήθηκε.
Υπάρχουν, ωστόσο, φορές που θέλουμε να περιορίσουμε τα αποτελέσματα του ερωτήματος σε μια συγκεκριμένη συνθήκη. Η ρήτρα WHERE στην SQL είναι χρήσιμη σε τέτοιες περιπτώσεις και λειτουργεί με τον ίδιο τρόπο σε ένα Ερώτημα ΔΙΑΓΡΑΦΗΣ ή ΕΝΗΜΕΡΩΣΗΣ όπως συμβαίνει σε ένα ερώτημα SELECT.
WHERE ρήτρα Σύνταξη
Η βασική σύνταξη της ρήτρας WHERE έχει ως εξής.
SELECT * FROM tableName WHERE condition;
ΕΔΩ
- "ΕΠΙΛΟΓΗ * ΑΠΟ Όνομα πίνακα" είναι το πρότυπο Δήλωση SELECT
- "ΟΠΟΥ" είναι η λέξη-κλειδί που περιορίζει το σύνολο αποτελεσμάτων και "κατάσταση" είναι το φίλτρο που εφαρμόζεται στα αποτελέσματα. Το φίλτρο μπορεί να είναι ένα εύρος, μια μεμονωμένη τιμή ή ένα δευτερεύον ερώτημα.
Ας υποθέσουμε ότι θέλουμε τα στοιχεία ενός μέλους από τον πίνακα μελών, δεδομένου του αριθμού μέλους 1. Το παρακάτω σενάριο το επιτυγχάνει αυτό.
SELECT * FROM `members` WHERE `membership_number` = 1;
Εκτέλεση αυτού του σεναρίου σε MySQL πάγκος εργασίας στο "myflixdb" παράγει το παρακάτω αποτέλεσμα.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Μία μόνο συνθήκη σπάνια είναι αρκετή. Οι παρακάτω ενότητες συνδυάζουν το WHERE με το λογικούς τελεστές.
WHERE ρήτρα σε συνδυασμό με – ΚΑΙ ΛΟΓΙΚΟΣ OperaTor
Με τον λογικό τελεστή AND, μια γραμμή επιστρέφεται μόνο εάν πληρούνται ΟΛΑ τα καθορισμένα κριτήρια.
Ας υποθέσουμε ότι θέλουμε όλες τις ταινίες της κατηγορίας 2 που κυκλοφόρησαν το 2008. Το παρακάτω σενάριο το επιτυγχάνει αυτό.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Η εκτέλεση του παραπάνω σεναρίου στο "myflixdb" παράγει το ακόλουθο αποτέλεσμα.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Το ΚΑΙ περιορίζει ένα σύνολο αποτελεσμάτων. Το Ή το διευρύνει.
WHERE ρήτρα σε συνδυασμό με – OR ΛΟΓΙΚΟΣ OperaTor
Με τον τελεστή OR, επιστρέφεται μια γραμμή εάν πληρούται ΟΠΟΙΟΔΗΠΟΤΕ από τα καθορισμένα κριτήρια.
Το ακόλουθο σενάριο κατατάσσει όλες τις ταινίες είτε στην κατηγορία 1 είτε στην κατηγορία 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Η αλυσιδωτή σύνδεση πολλών συνθηκών OR γίνεται δύσκολο να διαβαστεί. Η λέξη-κλειδί IN λύνει αυτό το πρόβλημα.
WHERE ρήτρα σε συνδυασμό με – IN Λέξη-κλειδί
Η ρήτρα WHERE, όταν χρησιμοποιείται με τη λέξη-κλειδί IN, επηρεάζει μόνο γραμμές των οποίων οι τιμές ταιριάζουν με την παρεχόμενη λίστα. Η ρήτρα IN μειώνει τον αριθμό των ρήτρων OR που διαφορετικά θα γράφατε.
Ο ακόλουθος MySQL Το ερώτημα WHERE IN δίνει γραμμές όπου το membership_number είναι είτε 1, 2 είτε 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
Η επιλογή NOT IN εκτελεί το αντίθετο φίλτρο.
WHERE ρήτρα σε συνδυασμό με – ΟΧΙ ΜΕΣΑ Λέξη-κλειδί
Με τη λέξη-κλειδί NOT IN, η ρήτρα WHERE εξαιρεί κάθε γραμμή της οποίας η τιμή ταιριάζει με την παρεχόμενη λίστα.
Το ακόλουθο ερώτημα δίνει γραμμές όπου το membership_number ΔΕΝ είναι 1, 2 ή 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Η συνάρτηση WHERE φιλτράρει επίσης τις τιμές κατά μέγεθος και ισότητα, χρησιμοποιώντας τελεστές σύγκρισης.
WHERE ρήτρα σε συνδυασμό με – ΣΥΓΚΡΙΣΗ Operaκορμοί
Οι τελεστές σύγκρισης μικρότερο από (<), ίσο με (=), μεγαλύτερο από (>) και όχι ίσο με (<>) μπορούν να χρησιμοποιηθούν με τον όρο WHERE.
= Ισο με
Το παρακάτω σενάριο παίρνει όλα τα θηλυκά μέλη από τον πίνακα μελών χρησιμοποιώντας τον τελεστή ίση προς σύγκριση.
SELECT * FROM `members` WHERE `gender` = 'Female';
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Μεγαλύτερος από
Το παρακάτω σενάριο λαμβάνει όλες τις πληρωμές που είναι μεγαλύτερες από 2,000 από τον πίνακα πληρωμών.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Δεν είναι ίσο με
Το παρακάτω σενάριο λαμβάνει όλες τις ταινίες των οποίων το αναγνωριστικό κατηγορίας δεν είναι 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Το σύνολο αποτελεσμάτων φαίνεται παρακάτω.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Γρήγορη αναφορά: Όρος WHERE Operaκορμοί
Οι τελεστές που συνδυάζονται συχνότερα με το WHERE συνοψίζονται παρακάτω. Πλήρεις ορισμοί εμφανίζονται στο MySQL αναφορά χειριστή.
| OperaTor | Νόημα | Παράδειγμα συνθήκης |
|---|---|---|
| = | Ισο με | `φύλο` = 'Θηλυκό' |
| <> | Οχι ίσο με | `category_id` <> 1 |
| > / | Μεγαλύτερο από / λιγότερο από | `ποσό_πληρωτέο` > 2000 |
| ΚΑΙ / Ή | Όλα τα κριτήρια / οποιαδήποτε κριτήρια | `category_id` = 2 ΚΑΙ `έτος_κυκλοφορίας` = 2008 |
| ΜΕΣΑ / ΟΧΙ ΜΕΣΑ | Αντιστοιχίζει / εξαιρεί μια λίστα | `αριθμός_μέλους` IN (1,2,3) |
| ΕΙΝΑΙ ΜΗΔΕΝΙΚΟ / ΔΕΝ ΕΙΝΑΙ ΜΗΔΕΝΙΚΟ | Δοκιμές για ελλείπουσες τιμές | Η `ταχυδρομική_διεύθυνση` ΕΙΝΑΙ ΜΗΔΕΝΙΚΗ |
⚠️ Σημείωση: Η τιμή NULL δεν αντιστοιχεί ποτέ σε = ή <>. Χρησιμοποιήστε την τιμή IS NULL ή IS NOT NULL όταν μια στήλη ενδέχεται να μην περιέχει καμία τιμή.
Γρίφος: Βρείτε ταινίες που επιστρέφονται αργά
Ας υποθέσουμε ότι θέλουμε τις ενοικιασμένες ταινίες που δεν έχουν επιστραφεί μέχρι την καταληκτική ημερομηνία 25/06/2012. Αυτό επιτυγχάνεται με τον συνδυασμό του WHERE με τον τελεστή "μικρότερο από" και του τελεστή AND.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Εκτέλεση του παραπάνω σεναρίου στο MySQL Ο πάγκος εργασίας δίνει τα ακόλουθα αποτελέσματα.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

