Trong SQL Null vừa là giá trị vừa là từ khóa. Trước tiên, hãy xem xét giá trị NULL -
Null as a Value
Nói một cách dễ hiểu, NULL chỉ đơn giản là một nơi chứa dữ liệu không tồn tại. Khi thực hiện các thao tác chèn trên bảng, chúng sẽ có lúc một số giá trị trường sẽ không có sẵn.
Để đáp ứng các yêu cầu của hệ quản trị cơ sở dữ liệu quan hệ thực sự, MySQL sử dụng NULL làm trình giữ chỗ cho các giá trị chưa được gửi. Ảnh chụp màn hình bên dưới cho thấy các giá trị NULL trông như thế nào trong cơ sở dữ liệu.
Bây giờ chúng ta hãy xem xét một số điều cơ bản cho NULL trước khi chúng ta đi sâu hơn vào cuộc thảo luận.
- NULL không phải là một kiểu dữ liệu - điều này có nghĩa là nó không được nhận dạng là "int", "date" hoặc bất kỳ kiểu dữ liệu được xác định nào khác.
- Các phép toán số học liên quan đến NULL luôn trả về NULL , ví dụ: 69 + NULL = NULL.
- Tất cả các hàm tổng hợp chỉ ảnh hưởng đến các hàng không có giá trị NULL .
Bây giờ chúng ta hãy chứng minh cách hàm đếm xử lý các giá trị null. Hãy xem nội dung hiện tại của bảng thành viên-
SELECT * FROM `members`;
Thực thi đoạn mã trên cho chúng ta các 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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
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 |
Hãy đếm tất cả các thành viên đã cập nhật contact_number của họ
SELECT COUNT(contact_number) FROM `members`;
Thực hiện truy vấn trên cho chúng ta kết quả sau.
COUNT(contact_number) |
---|
7 |
Lưu ý: Các giá trị NULL chưa được bao gồm
Cái gì không?
Toán tử logic NOT được sử dụng để kiểm tra điều kiện Boolean và 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
Tình trạng |
KHÔNG phải kết quả của nhà điều hành |
Thật |
Sai |
Sai |
Thật |
Tại sao sử dụng NOT null?
Sẽ có trường hợp chúng ta phải thực hiện các phép tính trên một tập kết quả truy vấn và trả về các giá trị. Thực hiện bất kỳ phép tính số học nào trên các cột có giá trị NULL trả về kết quả rỗng. Để tránh những trường hợp như vậy xảy ra, chúng tôi có thể sử dụng mệnh đề NOT NULL để giới hạn kết quả mà dữ liệu của chúng tôi hoạt động.
Giá trị KHÔNG ĐẦY ĐỦ
Giả sử rằng chúng ta muốn tạo một bảng với các trường nhất định phải luôn được cung cấp các giá trị khi chèn các hàng mới trong bảng. Chúng ta có thể sử dụng mệnh đề NOT NULL trên một trường nhất định khi tạo bảng.
Ví dụ được hiển thị bên dưới tạo một bảng mới chứa dữ liệu của nhân viên. Số nhân viên phải luôn đượ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ử chèn một bản ghi mới mà không chỉ định tên nhân viên và xem điều gì sẽ xảy ra.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Việc thực thi tập lệnh trên trong MySQL workbench sẽ xảy ra lỗi sau:
Từ khóa NULL
NULL cũng có thể được sử dụng như một từ khóa khi thực hiện các phép toán Boolean trên các giá trị bao gồm NULL. Từ khóa "IS / NOT" được sử dụng cùng với từ NULL cho các mục đích như vậy. Cú pháp cơ bản khi null được sử dụng làm từ khóa như sau
`comlumn_name' IS NULL`comlumn_name' NOT NULL
ĐÂY
- "IS NULL" là từ khóa thực hiện phép so sánh Boolean. Nó trả về true nếu giá trị được cung cấp là NULL và false nếu giá trị được cung cấp không phải là NULL.
- "NOT NULL" là từ khóa thực hiện phép so sánh Boolean. 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.
Bây giờ chúng ta hãy xem xét một ví dụ thực tế sử dụng từ khóa NOT NULL để loại bỏ tất cả các giá trị cột có giá trị null.
Tiếp tục với ví dụ trên, giả sử chúng ta cần thông tin chi tiết về các thành viên có số liên lạc không rỗng. Chúng tôi có thể thực hiện một truy vấn như
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Việc thực thi truy vấn trên chỉ cung cấp các bản ghi có số liên lạc không rỗng.
Giả sử chúng ta muốn các bản ghi thành viên có số liên lạc là null. Chúng tôi có thể sử dụng truy vấn sau
SELECT * FROM `members` WHERE contact_number IS NULL;
Thực hiện truy vấn trên cung cấp thông tin chi tiết về 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 | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
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 |
So sánh giá trị null s
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 xác định", "Đúng" hoặc "Sai".
Ví dụ: sử dụng từ khóa "IS NULL" khi thực hiện các phép toán so sánh liên quan đến NULL có thể trả về true hoặc false . Sử dụng các toán tử so sánh khác trả về "Không xác định" (NULL).
Giả sử bạn so sánh số năm với số 5
SELECT 5 =5;
Kết quả truy vấn là 1 có nghĩa là ĐÚNG
5 =5 |
---|
1 |
Hãy thực hiện thao tác tương tự với NULL
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
Hãy xem một ví dụ khác
SELECT 5 > 5;
5> 5 |
---|
0 |
Kết quả truy vấn là 0 có nghĩa là FALSE
Hãy xem xét cùng một ví dụ sử dụng NULL
SELECT NULL > NULL;
NULL> NULL |
---|
NULL |
Cho phép sử dụng từ khóa IS NULL
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
Kết quả truy vấn là 0 là FALSE
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
Kết quả truy vấn là 1 là TRUE
Tóm lược
- NULL là một giá trị giữ chỗ cho các trường bảng tùy chọn.
- MySQL xử lý giá trị NULL khác với các kiểu dữ liệu khác. Các giá trị NULL khi được sử dụng trong một điều kiện sẽ cho kết quả là giá trị Boolean sai.
- Phép toán logic NOT được sử dụng để kiểm tra các giá trị Boolean và đánh giá là true nếu giá trị Boolean là false và false nếu giá trị Boolean là true.
- Mệnh đề NOT NULL được sử dụng để loại bỏ các giá trị NULL khỏi tập kết quả
- Thực hiện các phép toán số học trên giá trị NULL luôn trả về kết quả NULL.
- Không thể sử dụng các toán tử so sánh như [, =, v.v.] để so sánh các giá trị NULL.