Một số RDBMS cung cấp hàm
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 có thể được sử dụng khi xử lý các giá trị null tiềm ẩn. Đặc biệt, mỗi MySQL, MariaDB và SQLite đều có một hàm SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 thay thế bất kỳ giá trị null nào bằng một giá trị khácCác RDBMS khác, chẳng hạn như SQL Server, Oracle và PostgreSQL cung cấp chức năng tương tự thông qua các chức năng có tên khác
Ví dụ về SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
Như đã đề cập, các RDBMS như MySQL, MariaDB và SQLite bao gồm một hàm
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 để thay thế các giá trị null bằng một giá trị khác. Đây là một ví dụ về cách thức hoạt động của SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 trong các RDBMS đóSELECT
IFNULL[ null, 'Dog' ],
IFNULL[ 'Horse', 'Dog' ],
IFNULL[ 'Horse', null ];
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+
Cách thức hoạt động của hàm
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 chấp nhận hai đối số. Nếu đối số đầu tiên là +------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0, thì đối số thứ hai được trả về. Nếu đối số đầu tiên không phải là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0, thì đối số đầu tiên được trả về
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 đánh giá giá trị hiện tại của bất kỳ biểu thức nàoSELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
Kết quả
________số 8Trong cột đầu tiên, tôi đã cố gắng chia cho 0, kết quả là giá trị null trong MySQL [và một cảnh báo]. Do đó, đối số thứ hai được trả về
Trong cột thứ hai, biểu thức trả về một giá trị khác null và do đó, nó được trả về
Trong cột thứ ba, đối số đầu tiên là một giá trị không phải ____80 và do đó nó được trả về. Đối số thứ hai thậm chí không được đánh giá trong trường hợp này. Để chứng minh điều này, đây là một mình
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4Kết quả
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
5Trong trường hợp này, MySQL không trả về cảnh báo như trước. Đó là bởi vì đối số đầu tiên không phải là ____80
Đây là một lần nữa với hằng số
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0 là đối số đầu tiên
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
8Kết quả
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
9Lần này chúng tôi nhận được cảnh báo. Đó là bởi vì đối số đầu tiên là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0, và do đó, nó chuyển sang đối số thứ hai [cũng giải quyết thành
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0]
Máy chủ SQL – +------------------------+------------------------+--------------------------+
| IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] |
+------------------------+------------------------+--------------------------+
| Dog | 15 | Horse |
+------------------------+------------------------+--------------------------+
1 row in set, 1 warning [0.01 sec]
8
SQL Server không có chức năng
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4, nhưng nó có chức năng SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
40 thực hiện điều tương tự mà SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 thực hiện trong các RDBMS đã đề cập ở trênThí dụ
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
6Kết quả
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
7Và đây là khi đối số đầu tiên là một giá trị không phải ____80
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+0
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+1
Nhưng nếu chúng ta cố gắng chia cho 0, chúng ta sẽ gặp lỗi
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+2
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+3
Nếu bạn đã sử dụng các RDBMS khác, bạn có thể nhầm lẫn về việc triển khai
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]8 của SQL Server. Các RDBMS khác [chẳng hạn như MySQL, MariaDB và Oracle] cũng có chức năng
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]8, nhưng với mục đích khác. Trong các RDBMS đó,
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]8 chỉ chấp nhận một đối số. Nếu đối số là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0, thì
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]8 trả về
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
48, nếu không thì trả về SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
49Cơ sở dữ liệu Oracle – SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
50
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
Cơ sở dữ liệu Oracle có chức năng
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
51 thực hiện điều tương tự mà SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 thực hiện trong các RDBMS khác+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+4
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+5
Cơ sở dữ liệu Oracle cũng có chức năng
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
53 cung cấp chức năng bổ sung cho SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
50. Hàm SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
55 của Oracle chấp nhận ba đối số. Điều này cho phép chúng tôi cung cấp một giá trị khác cho các giá trị không phải ____80Khi đối số đầu tiên không phải là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0, đối số thứ hai được trả về. Nếu không, đối số thứ ba được trả về
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+6
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+7
Ở đây, đối số đầu tiên là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0 và vì vậy đối số thứ ba được trả về
Đây là những gì xảy ra khi đối số đầu tiên không phải là
+------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]0
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+8
Kết quả
+-----------------------+--------------------------+-------------------------+ | IFNULL[ null, 'Dog' ] | IFNULL[ 'Horse', 'Dog' ] | IFNULL[ 'Horse', null ] | +-----------------------+--------------------------+-------------------------+ | Dog | Horse | Horse | +-----------------------+--------------------------+-------------------------+9
PostgreSQL – SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
80
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
PostgreSQL không có hàm
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 hoặc hàm +------------------------+------------------------+--------------------------+ | IFNULL[ 3 / 0, 'Dog' ] | IFNULL[ 3 * 5, 'Dog' ] | IFNULL[ 'Horse', 1 / 0 ] | +------------------------+------------------------+--------------------------+ | Dog | 15 | Horse | +------------------------+------------------------+--------------------------+ 1 row in set, 1 warning [0.01 sec]8. Nhưng nó hỗ trợ tiêu chuẩn SQL
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
80 [cũng như tất cả các RDBMS đã đề cập ở trên]SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
80 trả về đối số không null đầu tiên. Vì vậy, chúng ta có thể làm như sauSELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
0Kết quả
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
7Nhưng sự khác biệt là chúng ta có thể truyền nhiều hơn hai đối số nếu muốn
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
2Kết quả
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
3Dù bằng cách nào, nó chỉ trả về giá trị đầu tiên không phải ____80
Cơ sở dữ liệu NoSQL
Toàn bộ khái niệm về
SELECT
IFNULL[ 3 / 0, 'Dog' ],
IFNULL[ 3 * 5, 'Dog' ],
IFNULL[ 'Horse', 1 / 0 ];
4 không chỉ giới hạn ở cơ sở dữ liệu SQL. Các loại DBMS khác như cơ sở dữ liệu NoSQL cũng cung cấp chức năng tương tự