4.4.6 & nbsp; làm việc với các giá trị null
Giá trị
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 có thể đáng ngạc nhiên cho đến khi bạn quen với nó. Về mặt khái niệm, mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 có nghĩa là một giá trị không xác định bị thiếu và nó được đối xử hơi khác với các giá trị khác.“a missing unknown value” and it is treated somewhat differently from other values. Để kiểm tra
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4, hãy sử dụng các toán tử mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
7 và mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
8, như được hiển thị ở đây:mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
Bạn không thể sử dụng các toán tử so sánh số học như
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
9, mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
0 hoặc mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
1 để kiểm tra mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4. Để chứng minh điều này cho chính mình, hãy thử truy vấn sau:mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Bởi vì kết quả của bất kỳ so sánh số học nào với
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 cũng là mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4, bạn không thể có được bất kỳ kết quả có ý nghĩa nào từ các so sánh đó.Trong MySQL,
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
5 hoặc mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 có nghĩa là sai và bất cứ điều gì khác có nghĩa là đúng. Giá trị sự thật mặc định từ một hoạt động boolean là mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
7.Cách xử lý đặc biệt này của
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 là lý do tại sao, trong phần trước, cần phải xác định động vật nào không còn sống bằng cách sử dụng mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
9 thay vì SELECT * FROM `members`;0.
Hai giá trị
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 được coi là bằng nhau trong SELECT * FROM `members`;2.
Khi thực hiện
SELECT * FROM `members`;3, các giá trị
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 được trình bày trước nếu bạn làm SELECT * FROM `members`;5 và kéo dài nếu bạn làm
SELECT * FROM `members`;6.
Một lỗi phổ biến khi làm việc với
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 là giả định rằng không thể chèn một chuỗi 0 hoặc một chuỗi trống vào một cột được xác định là SELECT * FROM `members`;8, nhưng đây không phải là trường hợp. Đây là những giá trị thực tế, trong khi
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
4 có nghĩa là không có giá trị. Bạn có thể kiểm tra điều này đủ dễ dàng bằng cách sử dụng 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | |
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 |
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | |
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 |
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
Do đó, hoàn toàn có thể chèn một chuỗi 0 hoặc trống vào cột
SELECT * FROM `members`;8, vì thực tế chúng là
SELECT * FROM `members`;8. Xem các vấn đề với giá trị null.
Trống [hoặc không gian] là một ký tự.Zero là một số.null có nghĩa là "không có giá trị".
Cảm ơn bạn
Hỏi ngày 21 tháng 10 năm 2015 lúc 8:55Oct 21, 2015 at 8:55
1
Null là một giá trị đặc biệt đại diện cho không có giá trị. Dưới đây là các quy tắc cơ bản về giá trị null: NULL trình bày không có giá trị. Null không giống như một chuỗi trống ''. NULL không giống như giá trị 0 0. NULL có thể được sử dụng như bất kỳ loại dữ liệu nào. Null không nên được sử dụng trong bất kỳ tùy chọn so sánh. Null có toán tử bình đẳng riêng "là". Null có toán tử không bình đẳng riêng "không phải". Bài tập hướng dẫn cho bạn thấy một số ví dụ thú vị: chọn 0 là null từ kép; 0
Chọn 0 không phải là NULL từ kép; 1
Chọn '' là null từ kép; 0
Chọn '' không phải là null từ kép; 1
Chọn null là null từ kép; 1
Chọn NULL không phải là null từ kép; 0
//dba.fyicenter.com/faq/mysql/What-IS-NULL-Value.html
Đã trả lời ngày 21 tháng 10 năm 2015 lúc 8:58Oct 21, 2015 at 8:58
Trong SQL NULL vừa là một giá trị cũng như từ khóa. Trước tiên, hãy nhìn vào giá trị null -
Null như một giá trị
Nói một cách đơn giản, NULL chỉ đơn giản là một người giữ vị trí cho dữ liệu không tồn tại. Khi thực hiện các hoạt động chèn trên các bảng, chúng sẽ là những lúc một số giá trị trường sẽ không khả dụng.
Để đáp ứng các yêu cầu của các hệ thống quản lý cơ sở dữ liệu quan hệ thực sự, MySQL sử dụng NULL làm người giữ vị trí cho các giá trị chưa được gửi. Ảnh chụp màn hình dưới đây cho thấy các giá trị null trông như thế nào trong cơ sở dữ liệu.
Bây giờ, hãy nhìn vào một số điều cơ bản cho NULL trước khi chúng ta đi sâu vào cuộc thảo luận.
- NULL không phải là một loại dữ liệu - điều này có nghĩa là nó không được công nhận là một Int Int, ngày Date, hoặc bất kỳ loại dữ liệu được xác định nào khác. – this means it is not recognized as an “int”, “date” or any other defined data type.
- Các hoạt động số học liên quan đến null luôn trả lại null chẳng hạn, 69 + null = null. involving NULL always return NULL for example, 69 + NULL = NULL.
- Tất cả các hàm tổng hợp chỉ có các hàng không có giá trị null.aggregate functions affect only rows that do not have NULL values.
Bây giờ, hãy trình bày cách thức chức năng đếm xử lý các giá trị null. Hãy để xem các nội dung hiện tại của bảng thành viên-
SELECT * FROM `members`;
Thực hiện tập lệnh trên cho chúng ta kết quả sau
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | |
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 tôi kết quả sau.
7 |
Lưu ý: các giá trị không được đưa vào
Cái gì không?
Toán tử không logic được sử dụng để kiểm tra các điều kiện boolean và trả về đúng nếu điều kiện là sai. Người vận hành không trả về sai nếu điều kiện được kiểm tra là đúng
ĐÚNG VẬY | Sai |
Sai | ĐÚNG VẬY |
Sai
Tại sao không sử dụng NULL?
Sẽ có những trường hợp khi chúng ta sẽ phải thực hiện tính toán trên tập kết quả truy vấn và trả về các giá trị. Thực hiện bất kỳ hoạt động số học nào trên các cột có giá trị null trả về kết quả null. Để tránh các tình huống như vậy xảy ra, chúng ta có thể sử dụng mệnh đề Not Null để hạn chế kết quả mà dữ liệu của chúng ta hoạt động.
Không phải giá trị null
Hãy giả sử rằng chúng tôi muốn tạo một bảng với các trường nhất định luôn luôn được cung cấp với các giá trị khi chèn các hàng mới vào bảng. Chúng ta có thể sử dụng mệnh đề Not Null trên một trường đã cho khi tạo bảng.
CREATE TABLE `employees`[ employee_number int NOT NULL, full_names varchar[255] , gender varchar[6] ];
Ví dụ được hiển thị bên dưới tạo ra 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
INSERT INTO `employees` [full_names,gender] VALUES ['Steve Jobs', 'Male'];
Bây giờ, hãy cố gắng chèn một bản ghi mới mà không cần chỉ định tên nhân viên và xem điều gì sẽ xảy ra.
Việc thực thi tập lệnh trên trong MySQL Workbench cho lỗi sau-
Từ khóa null
`comlumn_name' IS NULL `comlumn_name' NOT NULL
NULL cũng có thể được sử dụng làm từ khóa khi thực hiện các hoạt động boolean trên các giá trị bao gồm NULL. Từ khóa là/không phải là từ khóa được sử dụng cùng với từ null cho các mục đích đó. Cú pháp cơ bản khi null được sử dụng làm từ khóa như sau
- NƠI ĐÂY is the keyword that performs the Boolean comparison. It returns true if the supplied value is NULL and false if the supplied value is not NULL.
- Đây là từ khóa thực hiện so sánh Boolean. Nó trả về đúng nếu giá trị được cung cấp là null và sai nếu giá trị được cung cấp không phải là null.is the keyword that performs the Boolean comparison. It returns true if the supplied value is not NULL and false if the supplied value is null.
Không phải Null Null là từ khóa thực hiện so sánh Boolean. Nó trả về đúng nếu giá trị được cung cấp không phải là null và sai nếu giá trị được cung cấp là null.
Bây giờ, hãy xem xét một ví dụ thực tế sử dụng từ khóa không null để loại bỏ tất cả các giá trị cột có giá trị null.
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
0Tiếp tục với ví dụ trên, giả sử chúng ta cần chi tiết về các thành viên có số liên lạc không phải là NULL. Chúng tôi có thể thực hiện một truy vấn như
Thực hiện truy vấn trên chỉ cung cấp các bản ghi trong đó số liên hệ không phải là null.
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
1Giả sử chúng tôi muốn hồ sơ thành viên trong đó số liên lạc là null. Chúng tôi có thể sử dụng truy vấn sau
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
2Thực hiện truy vấn trên cung cấp chi tiết thành viên có số liên lạc là null
So sánh các giá trị null – performing Boolean operations on conditions that involve NULL can either return “Unknown”, “True” or “False”.
Logic ba giá trị-thực hiện các hoạt động boolean trên các điều kiện liên quan đến NULL có thể trả về không rõ ràng, không rõ ràng, hayusing the “IS NULL” keyword when doing comparison operations involving NULL can either return true or false. Using other comparison operators returns “Unknown”[NULL].
Ví dụ: sử dụng từ khóa là NULL, khi thực hiện các hoạt động so sánh liên quan đến NULL có thể trả về đúng hoặc sai. Sử dụng các toán tử so sánh khác trả về không rõ [NULL].
Giả sử bạn so sánh số năm với 5
mysql> SELECT 1 = NULL, 1 NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
3Kết quả truy vấn là 1 có nghĩa là đúng
Hãy cùng thực hiện hoạt động tương tự với NULL
Hãy nhìn vào một ví dụ khác
Kết quả truy vấn là 0 có nghĩa là sai
Hãy xem xét cùng một ví dụ bằng cách sử dụng NULL
Hãy để sử dụng từ khóa là null
Kết quả truy vấn là 0 là sai
Kết quả truy vấn là 1 là sự thật
- Bản tóm tắt
- NULL là người giữ vị trí giá trị cho các trường bảng tùy chọn.
- MySQL xử lý giá trị null khác với các loại dữ liệu khác. Các giá trị null khi được sử dụng trong một điều kiện đánh giá giá trị boolean giả.
- Hoạt động không logic được sử dụng để kiểm tra các giá trị boolean và đánh giá đúng nếu giá trị boolean là sai và sai nếu giá trị boolean là đúng.
- Mệnh đề không 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 hoạt động số học trên các giá trị null luôn trả về kết quả null.