MySQL nếu NULL thì 0

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ác

Cá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

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ào

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];

Kết quả

________số 8

Trong 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 ];
4

Kết quả

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
5

Trong 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 ];
8

Kết quả

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
9

Lầ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ên

Thí dụ

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
6

Kết quả

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
7

Và đâ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 ];
49

Cơ sở dữ liệu Oracle –
SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
50

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 ____80

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, đố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

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ư sau

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
0

Kết quả

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
7

Như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 ];
2

Kết quả

SELECT
    IFNULL[ 3 / 0, 'Dog' ],
    IFNULL[ 3 * 5, 'Dog' ],
    IFNULL[ 'Horse', 1 / 0 ];
3

Dù 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ự

Làm cách nào để trả về 0 nếu NULL trong MySQL?

Chúng ta có thể trả về 0 cho NULL trong MySQL với sự trợ giúp của phương thức IFNULL[] . Cú pháp của IFNULL[] như sau. IFNULL[YOUREXPRESSION,0];

NULL có phải là 0 trong SQL không?

Giá trị NULL trong SQL là gì? . Nếu chúng ta mở rộng giải thích lý thuyết này, thì giá trị NULL trỏ đến một giá trị không xác định nhưng giá trị không xác định này không tương đương với giá trị 0 hoặc trường chứa dấu cách.

NULL và 0 có giống nhau trong MySQL không?

Trong MySQL, 0 hoặc NULL có nghĩa là sai và mọi thứ khác có nghĩa là đúng . Giá trị thật mặc định từ phép toán boolean là 1.

IS NULL trong điều kiện if trong MySQL?

Hàm IFNULL[] trả về một giá trị đã chỉ định nếu biểu thức là NULL. Nếu biểu thức KHÔNG NULL, hàm này trả về biểu thức

Chủ Đề