MySQL IS NULL & IS NOT NULL kèm ví dụ
⚡ Tóm tắt thông minh
MySQL IS NULL và IS NOT NULL là các từ khóa so sánh dùng để kiểm tra xem một cột có chứa giá trị bị thiếu hay không. NULL đánh dấu dữ liệu bị thiếu, hoạt động khác với số 0 hoặc chuỗi rỗng, và yêu cầu các toán tử chuyên dụng để lọc dữ liệu một cách đáng tin cậy.

Trong SQL, NULL vừa là một giá trị vừa là một từ khóa. Trước tiên, chúng ta hãy xem xét giá trị NULL.
NULL là gì? MySQL?
Trong thuật ngữ đơn giản, NULL là ký tự đại diện cho dữ liệu không tồn tại.Khi thực hiện các thao tác chèn dữ liệu vào bảng, đôi khi sẽ xảy ra trường hợp một số giá trị trường không khả dụng.
Để đáp ứng các yêu cầu của hệ thống quản lý cơ sở dữ liệu quan hệ thực sự, MySQL Sử dụng NULL làm ký tự đại diện cho các giá trị chưa được gửi. Ảnh chụp màn hình bên dưới cho thấy giá trị NULL trông như thế nào trong bảng cơ sở dữ liệu.
Hãy lưu ý rằng các ô trống được đánh dấu là NULL, chứ không phải văn bản trống và cũng không phải là số không. Trước khi đi tiếp, hãy xem xét một số kiến thức cơ bản về NULL.
- NULL không phải là kiểu dữ liệu – điều này có nghĩa là nó không được công nhận là “int”, “date” hoặc bất kỳ loại dữ liệu được xác định nào khác.
- Các phép tính toán học liên quan đến NULL luôn luôn trả về giá trị rỗngVí dụ, 69 + NULL = NULL.
- Hầu hết Chức năng tổng hợp bỏ qua các hàng có giá trị NULL.Ngoại lệ duy nhất là COUNT(*), hàm này đếm mọi hàng bất kể giá trị NULL.
Cách các hàm tổng hợp xử lý giá trị NULL
Quy tắc này thay đổi các câu trả lời mà các truy vấn báo cáo trả về, vì vậy hãy cùng chứng minh điều đó. Bắt đầu với nội dung hiện tại của bảng thành viên.
SELECT * FROM `members`;
Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.
| 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 |
Cột số liên lạc được tô sáng có tổng cộng chín hàng, nhưng hai trong số đó là NULL. Hãy đếm tất cả các thành viên đã cập nhật số liên lạc của họ.
SELECT COUNT(contact_number) FROM `members`;
Thực hiện truy vấn trên sẽ cho chúng ta kết quả sau.
| COUNT(contact_number) |
|---|
| 7 |
Lưu ý: Câu trả lời là 7 chứ không phải 9, vì hai giá trị NULL không được bao gồm. Chạy hàm COUNT(*) trên cùng bảng đó sẽ trả về 9, vì COUNT(*) đếm số hàng chứ không phải số giá trị.
KHÔNG có giá trị NULL
Một cách tiếp cận an toàn hơn là ngăn chặn hoàn toàn giá trị NULL xuất hiện trong các cột bắt buộc. Đó là nhiệm vụ của ràng buộc NOT NULL.
Cái KHÔNG phải là gì Operator?
Toán tử logic NOT được sử dụng để kiểm tra các điều kiện Boolean, và nó trả về true nếu điều kiện sai. Toán tử NOT trả về false nếu điều kiện được kiểm tra là đúng.
| Điều kiện | KHÔNG Operakết quả tor |
|---|---|
| Thật | Sai |
| Sai | Thật |
Tại sao lại sử dụng NOT NULL?
Sẽ có những trường hợp chúng ta phải thực hiện các phép tính trên tập kết quả truy vấn và trả về các giá trị. Thực hiện bất kỳ phép toán số học nào trên một cột chứa giá trị NULL sẽ trả về kết quả NULL. Để tránh những tình huống như vậy, chúng ta có thể sử dụng mệnh đề NOT NULL để giới hạn phạm vi kết quả mà dữ liệu của chúng ta hoạt động.
Tạo bảng với cột NOT NULL
Giả sử chúng ta muốn tạo một bảng với một số trường nhất định mà khi chèn thêm hàng mới, các trường đó luôn phải được điền giá trị. Chúng ta có thể sử dụng mệnh đề NOT NULL trên một trường cụ thể khi tạo bảng.
Ví dụ dưới đây tạo một bảng mới chứa dữ liệu nhân viên. Mã số nhân viên luôn phải được cung cấp.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Bây giờ chúng ta hãy thử thêm một bản ghi mới mà không chỉ định số nhân viên và xem điều gì sẽ xảy ra.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Thực thi đoạn script trên trong MySQL Workbench Báo lỗi sau vì thiếu cột bắt buộc.
Từ khóa IS NULL và IS NOT NULL
Ràng buộc này ngăn chặn việc tạo các giá trị NULL mới. Để làm việc với các giá trị NULL đã tồn tại, từ khóa NULL được sử dụng. Cú pháp như sau.
column_name IS NULL column_name IS NOT NULL
tại ĐÂY
- “LÀ KHÔNG” là từ khóa thực hiện so sánh Boolean. Nó trả về true nếu giá trị được cung cấp là NULL và trả về false nếu giá trị được cung cấp không phải là NULL.
- “KHÔNG PHẢI LÀ NULL” Từ khóa `this` thực hiện phép so sánh ngược lại. Nó trả về `true` nếu giá trị được cung cấp không phải là NULL và `false` nếu giá trị được cung cấp là NULL.
Hãy xem xét một ví dụ thực tế sử dụng từ khóa IS NOT NULL để loại bỏ tất cả các hàng chứa giá trị NULL trong một cột.
Tiếp tục với bảng thành viên ở trên, giả sử chúng ta cần thông tin chi tiết của các thành viên có số điện thoại liên lạc không phải là NULL. Chúng ta có thể thực hiện truy vấn như sau.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Việc thực thi truy vấn trên chỉ trả về bảy bản ghi có số điện thoại liên hệ, trùng khớp với kết quả COUNT từ phần trước.
Bây giờ giả sử chúng ta muốn điều ngược lại: các bản ghi thành viên thiếu số điện thoại liên lạc. Chúng ta có thể sử dụng truy vấn sau.
SELECT * FROM `members` WHERE contact_number IS NULL;
Việc thực thi truy vấn trên trả về hai bản ghi thành viên có số liên lạc là 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 |
Cảnh báo: Một điều kiện như WHERE contact_number = NULL sẽ trả về một tập kết quả rỗng, ngay cả khi giá trị NULL tồn tại. Toán tử so sánh bằng không bao giờ khớp với NULL, vì vậy IS NULL là phép thử duy nhất chính xác.
So sánh các giá trị NULL với logic ba giá trị
Logic ba giá trị – thực hiện các phép toán Boolean trên các điều kiện liên quan đến NULL có thể trả về “Không rõ”, “Đúng” hoặc “Sai”.
Sử dụng từ khóa “IS NULL” khi thực hiện các thao tác so sánh liên quan đến NULL Trả về đúng or saiViệc sử dụng các toán tử so sánh khác sẽ trả về... “Không xác định” (NULL)Bảng dưới đây so sánh từng biểu thức cạnh nhau.
| Biểu hiện | Kết quả | Ý nghĩa |
|---|---|---|
| SELECT 5 = 5; | 1 | TRUE |
| SELECT NULL = NULL; | NULL | KHÔNG BIẾT |
| SELECT 5 > 5; | 0 | KHÔNG ĐÚNG |
| SELECT NULL > NULL; | NULL | KHÔNG BIẾT |
| SELECT 5 IS NULL; | 0 | KHÔNG ĐÚNG |
| SELECT NULL IS NULL; | 1 | TRUE |
So sánh số năm với chính nó, sau đó lặp lại thao tác với NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Kết quả đầu tiên là 1 (TRUE). Kết quả thứ hai là NULL, bởi vì MySQL Không thể khẳng định rằng một giá trị chưa biết bằng một giá trị chưa biết khác. Bây giờ hãy sử dụng từ khóa IS NULL trên cùng các giá trị đó.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Lần này câu trả lời là dứt khoát: 0 (SAI) và 1 (ĐÚNG). Chỉ có các từ khóa IS NULL và IS NOT NULL mới trả về câu trả lời dứt khoát khi có giá trị NULL.


