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.

  • 🧩 Định nghĩa cốt lõi: NULL là một ký tự đại diện cho dữ liệu không tồn tại. Nó không phải là một kiểu dữ liệu, và cũng không phải là số không.
  • Hành vi số học: Bất kỳ biểu thức số học nào có chứa NULL đều trả về NULL, vì vậy 69 + NULL sẽ cho kết quả là NULL chứ không phải 69.
  • 📊 Tác động tổng hợp: Hàm COUNT(column) và các hàm tổng hợp khác bỏ qua các hàng có giá trị NULL, trong khi hàm COUNT(*) vẫn đếm mọi hàng trong bảng.
  • 🚫 Ràng buộc NOT NULL: Khai báo một cột là NOT NULL sẽ từ chối bất kỳ thao tác chèn nào thiếu giá trị, điều này giúp bảo vệ các trường bắt buộc như mã định danh.
  • 🔍 Lọc chính xác: IS NULL và IS NOT NULL là những phép kiểm tra đáng tin cậy duy nhất, bởi vì toán tử so sánh bằng không bao giờ khớp với giá trị NULL.
  • ⚖️ Logic ba giá trị: So sánh với NULL sẽ trả về UNKNOWN, vì vậy SELECT NULL = NULL sẽ trả về NULL thay vì TRUE.

MySQL IS NULL và IS NOT NULL

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.

MySQL LÀ NULL & KHÔNG PHẢI LÀ 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.

Null như một giá trị

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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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.

KHÔNG có giá trị NULL

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 email
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.

Câu Hỏi Thường Gặp

Số 0 là một số và chuỗi rỗng là văn bản, vì vậy cả hai đều khớp với các phép kiểm tra bằng nhau. NULL có nghĩa là không có giá trị nào được cung cấp, đó là lý do tại sao nó chỉ phản hồi với IS NULL và IS NOT NULL.

IFNULL(column, 'N/A') trả về giá trị thay thế bất cứ khi nào cột là NULL. COALESCE(a, b, c) trả về đối số đầu tiên không phải là NULL. Cả hai đều hữu ích bên trong MySQL chức năng và báo cáo.

STT MySQL Chỉ mục NOT NULL được áp dụng tự động cho mọi cột khóa chính, vì khóa xác định một hàng không thể bị thiếu. Chỉ mục UNIQUE thì khác và cho phép nhiều giá trị NULL.

Thông thường là có. Các trợ lý AI bên trong các công cụ như... MySQL Workbench Chuyển cột “thành viên không có số điện thoại” thành mệnh đề WHERE column IS NULL. RevHãy xem bộ lọc, vì phép kiểm tra sự bằng nhau với NULL sẽ không trả về kết quả gì.

Thường thì đúng vậy. Các công cụ kiểm tra bằng AI sẽ phát hiện các lỗi như so sánh = NULL, v.v. CHỌN Phương pháp này tính trung bình một cột chứa giá trị NULL và loại bỏ các danh sách chứa NULL. Quyết định cuối cùng thuộc về người hiểu rõ dữ liệu.

Tóm tắt bài viết này với: