MySQL IS NULL & IS NOT NULL με παραδείγματα
⚡ Έξυπνη Σύνοψη
MySQL Οι λέξεις-κλειδιά IS NULL και IS NOT NULL είναι λέξεις-κλειδιά σύγκρισης που ελέγχουν εάν μια στήλη περιέχει μια τιμή που λείπει. Η συνάρτηση NULL σηματοδοτεί τα δεδομένα που λείπουν, συμπεριφέρεται διαφορετικά από το μηδέν ή μια κενή συμβολοσειρά και απαιτεί ειδικούς τελεστές για αξιόπιστο φιλτράρισμα.

Στην SQL, η τιμή NULL είναι ταυτόχρονα τιμή και λέξη-κλειδί. Ας εξετάσουμε πρώτα την τιμή NULL.
Τι είναι το NULL στο MySQL?
Με απλά λόγια, Το NULL είναι ένα σύμβολο κράτησης θέσης για δεδομένα που δεν υπάρχουνΚατά την εκτέλεση εργασιών εισαγωγής σε πίνακες, θα υπάρξουν φορές που ορισμένες τιμές πεδίων δεν θα είναι διαθέσιμες.
Προκειμένου να ικανοποιηθούν οι απαιτήσεις των αληθινών σχεσιακών συστημάτων διαχείρισης βάσεων δεδομένων, MySQL Η τιμή NULL χρησιμοποιείται ως σύμβολο κράτησης θέσης για τις τιμές που δεν έχουν υποβληθεί. Το παρακάτω στιγμιότυπο οθόνης δείχνει πώς εμφανίζονται οι τιμές NULL σε έναν πίνακα βάσης δεδομένων.
Παρατηρήστε ότι τα κενά κελιά επισημαίνονται με NULL, όχι με κενό κείμενο και όχι με μηδέν. Πριν προχωρήσουμε, εξετάστε ορισμένα από τα βασικά του NULL.
- Το NULL δεν είναι τύπος δεδομένων – αυτό σημαίνει ότι δεν αναγνωρίζεται ως «int», «date» ή οποιοσδήποτε άλλος καθορισμένος τύπος δεδομένων.
- Αριθμητικές πράξεις συμμετοχή Τιμή NULL πάντοτε επιστροφή NULL, για παράδειγμα, 69 + NULL = NULL.
- γέφυρα αθροιστικές συναρτήσεις αγνοήστε τις γραμμές που περιέχουν τιμές NULLΗ μόνη εξαίρεση είναι η COUNT(*), η οποία μετράει κάθε γραμμή ανεξάρτητα από το NULL.
Πώς οι συναρτήσεις συνάθροισης αντιμετωπίζουν το NULL
Αυτός ο κανόνας αλλάζει τις απαντήσεις που επιστρέφουν τα ερωτήματα αναφοράς, οπότε ας το αποδείξουμε. Ξεκινήστε με τα τρέχοντα περιεχόμενα του πίνακα μελών.
SELECT * FROM `members`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
| membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ 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 |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Η επισημασμένη στήλη contact_ number περιέχει συνολικά εννέα γραμμές, αλλά δύο από αυτές είναι NULL. Ας μετρήσουμε όλα τα μέλη που έχουν ενημερώσει τον αριθμό επικοινωνίας τους.
SELECT COUNT(contact_number) FROM `members`;
Η εκτέλεση του παραπάνω ερωτήματος μας δίνει τα ακόλουθα αποτελέσματα.
| COUNT(contact_number) |
|---|
| 7 |
Σημείωση: Η απάντηση είναι 7 και όχι 9, επειδή οι δύο τιμές NULL δεν συμπεριλήφθηκαν. Η εκτέλεση της συνάρτησης COUNT(*) στον ίδιο πίνακα θα επέστρεφε 9, αφού η συνάρτηση COUNT(*) μετράει γραμμές αντί για τιμές.
NOT NULL Τιμές
Μια ασφαλέστερη προσέγγιση είναι να σταματήσετε εντελώς την εισαγωγή υποχρεωτικών στηλών από την τιμή NULL. Αυτή είναι η λειτουργία του περιορισμού NOT NULL.
Τι ΔΕΝ είναι Operaβραχώδης κορυφή?
Ο λογικός τελεστής NOT χρησιμοποιείται για τον έλεγχο των δυαδικών συνθηκών και επιστρέφει true εάν η συνθήκη είναι ψευδής. Ο τελεστής NOT επιστρέφει false εάν η υπό έλεγχο συνθήκη είναι αληθής.
| Κατάσταση | ΔΕΝ Operator Αποτέλεσμα |
|---|---|
| Οι αληθινοί | Ψευδής |
| Ψευδής | Οι αληθινοί |
Γιατί να χρησιμοποιήσω NOT NULL;
Θα υπάρξουν περιπτώσεις όπου θα πρέπει να εκτελέσουμε υπολογισμούς σε ένα σύνολο αποτελεσμάτων ερωτήματος και να επιστρέψουμε τις τιμές. Η εκτέλεση οποιασδήποτε αριθμητικής πράξης σε μια στήλη που περιέχει μια τιμή NULL επιστρέφει ένα αποτέλεσμα NULL. Για να αποφύγουμε τέτοιες καταστάσεις, μπορούμε να χρησιμοποιήσουμε την ρήτρα NOT NULL για να περιορίσουμε τα αποτελέσματα στα οποία λειτουργούν τα δεδομένα μας.
Δημιουργία πίνακα με στήλη NOT NULL
Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε έναν πίνακα με συγκεκριμένα πεδία στα οποία θα πρέπει πάντα να παρέχονται τιμές κατά την εισαγωγή νέων γραμμών. Μπορούμε να χρησιμοποιήσουμε την ρήτρα NOT NULL σε ένα δεδομένο πεδίο κατά τη δημιουργία του πίνακα.
Το παράδειγμα που φαίνεται παρακάτω δημιουργεί έναν νέο πίνακα που περιέχει δεδομένα υπαλλήλου. Ο αριθμός του υπαλλήλου θα πρέπει πάντα να παρέχεται.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Ας προσπαθήσουμε τώρα να εισαγάγουμε μια νέα εγγραφή χωρίς να καθορίσουμε τον αριθμό υπαλλήλου και ας δούμε τι θα συμβεί.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Εκτέλεση του παραπάνω σεναρίου στο MySQL Πάγκος εργασίας δίνει το ακόλουθο σφάλμα, επειδή η υποχρεωτική στήλη παραλείφθηκε.
Λέξεις-κλειδιά IS NULL και IS NULL
Ο περιορισμός αποκλείει νέες τιμές NULL. Για να εργαστείτε με τιμές NULL που υπάρχουν ήδη, η λέξη-κλειδί NULL χρησιμοποιείται ως λέξη-κλειδί. Η σύνταξη έχει ως εξής.
column_name IS NULL column_name IS NOT NULL
ΕΔΩ
- “ΕΙΝΑΙ ΜΗΧΑΝΟ” είναι η λέξη-κλειδί που εκτελεί τη σύγκριση Boole. Επιστρέφει true εάν η παρεχόμενη τιμή είναι NULL και false εάν η παρεχόμενη τιμή δεν είναι NULL.
- «ΔΕΝ ΕΙΝΑΙ ΜΗΔΕΝΙΚΟ» είναι η λέξη-κλειδί που εκτελεί την αντίστροφη σύγκριση. Επιστρέφει true εάν η παρεχόμενη τιμή δεν είναι NULL και false εάν η παρεχόμενη τιμή είναι NULL.
Ας δούμε ένα πρακτικό παράδειγμα που χρησιμοποιεί τη λέξη-κλειδί IS NOT NULL για να εξαλείψει όλες τις γραμμές που περιέχουν τιμές NULL σε μια στήλη.
Συνεχίζοντας με τον παραπάνω πίνακα μελών, ας υποθέσουμε ότι χρειαζόμαστε τα στοιχεία των μελών των οποίων ο αριθμός επικοινωνίας δεν είναι NULL. Μπορούμε να εκτελέσουμε ένα ερώτημα όπως αυτό.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Η εκτέλεση του παραπάνω ερωτήματος επιστρέφει μόνο τις επτά εγγραφές όπου υπάρχει ο αριθμός επαφής, κάτι που ταιριάζει με το αποτέλεσμα COUNT από την προηγούμενη ενότητα.
Τώρα ας υποθέσουμε ότι θέλουμε το αντίθετο: τις εγγραφές μελών όπου λείπει ο αριθμός επικοινωνίας. Μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα.
SELECT * FROM `members` WHERE contact_number IS NULL;
Η εκτέλεση του παραπάνω ερωτήματος δίνει τις δύο εγγραφές μελών των οποίων ο αριθμός επικοινωνίας είναι NULL.
| membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 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 |
Προειδοποίηση: Μια συνθήκη όπως WHERE contact_number = NULL επιστρέφει ένα κενό σύνολο αποτελεσμάτων, παρόλο που υπάρχουν τιμές NULL. Ο τελεστής ισότητας δεν μπορεί ποτέ να αντιστοιχίσει την τιμή NULL, επομένως η τιμή IS NULL είναι η μόνη σωστή δοκιμή.
Σύγκριση τιμών NULL με λογική τριών τιμών
Λογική τριών αξιών – η εκτέλεση Boolean πράξεων σε συνθήκες που περιλαμβάνουν NULL μπορεί να επιστρέψει «Άγνωστο», «Σωστό» ή «Λάθος».
Χρησιμοποιώντας τη λέξη-κλειδί «IS NULL» κατά την εκτέλεση πράξεων σύγκρισης που αφορούν NULL Επιστροφές ναι or ψευδήςΗ χρήση των άλλων τελεστών σύγκρισης επιστρέφει «Άγνωστο» (NULL)Ο παρακάτω πίνακας συγκρίνει κάθε παράσταση δίπλα-δίπλα.
| Έκφραση | Αποτέλεσμα | Νόημα |
|---|---|---|
| ΕΠΙΛΟΓΗ 5 = 5; | 1 | ΑΛΗΘΙΝΗ |
| ΕΠΙΛΕΞΤΕ NULL = NULL; | Τιμή NULL | ΑΓΝΩΣΤΟΣ |
| ΕΠΙΛΟΓΗ 5 > 5; | 0 | ΨΕΥΔΗΣ |
| ΕΠΙΛΕΞΤΕ ΜΗΔΕΝΙΚΟ > ΜΗΔΕΝΙΚΟ; | Τιμή NULL | ΑΓΝΩΣΤΟΣ |
| Η ΕΠΙΛΟΓΗ 5 ΕΙΝΑΙ ΜΗΔΕΝΙΚΗ; | 0 | ΨΕΥΔΗΣ |
| Η ΕΠΙΛΟΓΗ NULL ΕΙΝΑΙ NULL; | 1 | ΑΛΗΘΙΝΗ |
Συγκρίνετε τον αριθμό πέντε με τον εαυτό του και, στη συνέχεια, επαναλάβετε τη λειτουργία με NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Το πρώτο αποτέλεσμα είναι 1 (TRUE). Το δεύτερο είναι NULL, επειδή MySQL δεν μπορεί να δηλώσει ότι μια άγνωστη τιμή ισούται με μια άλλη άγνωστη τιμή. Τώρα χρησιμοποιήστε τη λέξη-κλειδί IS NULL στις ίδιες τιμές.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Αυτή τη φορά οι απαντήσεις είναι οριστικές: 0 (ΛΑΘΟΣ) και 1 (ΑΛΗΘΗΣ). Μόνο οι λέξεις-κλειδιά IS NULL και IS NOT NULL επιστρέφουν οριστική απάντηση όταν εμπλέκεται η τιμή NULL.


