Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giải thích hàm IF () trong MySQL

MySQL có IF() chức năng cung cấp một cách thuận tiện để thực hiện thao tác “IF / ELSE” đơn giản.

Nó hoạt động tương tự như một IF cơ bản / ELSE , trong đó nó cho phép chúng tôi kiểm tra một điều kiện và trả về một kết quả khác tùy thuộc vào việc điều đó có đúng hay không.

Cụ thể hơn, nếu đối số đầu tiên của IF() hàm là true, đối số thứ hai được trả về. Nếu không đúng, đối số thứ ba sẽ được trả về.

Cú pháp

IF(expr1,expr2,expr3)

Nếu expr1 TRUE ( expr1 <> 0 expr1 KHÔNG ĐẦY ĐỦ ), IF() trả về expr2 . Nếu không, nó trả về expr3 .

Loại trả lại

  • Nếu expr2 hoặc expr3 tạo ra một chuỗi, kết quả là một chuỗi. Nếu expr2 expr3 là cả hai chuỗi và một trong hai chuỗi có phân biệt chữ hoa chữ thường, kết quả là phân biệt chữ hoa chữ thường.
  • Nếu expr2 hoặc expr3 tạo ra giá trị dấu phẩy động, kết quả là giá trị dấu phẩy động.
  • Nếu expr2 hoặc expr3 tạo ra một số nguyên, kết quả là một số nguyên.

Ví dụ

Dưới đây là một ví dụ đơn giản để chứng minh cách nó hoạt động:

SELECT IF( 1 > 2, 'Yes', 'No' );

Kết quả:

No

Tại đây, chúng tôi đã kiểm tra xem 1 có lớn hơn 2. Không và vì vậy đối số thứ ba đã được trả về.

Dưới đây là những gì sẽ xảy ra khi biểu thức đầu tiên là true:

SELECT IF( 2 > 1, 'Yes', 'No' );

Kết quả:

Yes

Ví dụ về cơ sở dữ liệu

Dưới đây là một ví dụ sử dụng IF() khi truy vấn cơ sở dữ liệu:

SELECT 
    Name,
    Population,
    IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;

Kết quả:

+---------------------+------------+-----------+
| Name                | Population | Big/Small |
+---------------------+------------+-----------+
| Afghanistan         |   22720000 | Big       |
| Albania             |    3401200 | Small     |
| Algeria             |   31471000 | Big       |
| American Samoa      |      68000 | Small     |
| Andorra             |      78000 | Small     |
| Angola              |   12878000 | Big       |
| Anguilla            |       8000 | Small     |
| Antarctica          |          0 | Small     |
| Antigua and Barbuda |      68000 | Small     |
| Argentina           |   37032000 | Big       |
+---------------------+------------+-----------+

IF() lồng nhau Chức năng

Có thể lồng IF() để cung cấp nhiều hơn một kết quả nhị phân.

Ví dụ:

SELECT 
    Name,
    Population,
    IF( 
        Population > 10000000, 
        IF( Population > 100000000, 'REALLY Big', 'Big' ), 
        'Small' 
        ) AS "Size"
FROM Country
WHERE Region = 'Southern and Central Asia'
ORDER BY Population DESC;

Kết quả:

+--------------+------------+------------+
| Name         | Population | Size       |
+--------------+------------+------------+
| India        | 1013662000 | REALLY Big |
| Pakistan     |  156483000 | REALLY Big |
| Bangladesh   |  129155000 | REALLY Big |
| Iran         |   67702000 | Big        |
| Uzbekistan   |   24318000 | Big        |
| Nepal        |   23930000 | Big        |
| Afghanistan  |   22720000 | Big        |
| Sri Lanka    |   18827000 | Big        |
| Kazakstan    |   16223000 | Big        |
| Tajikistan   |    6188000 | Small      |
| Kyrgyzstan   |    4699000 | Small      |
| Turkmenistan |    4459000 | Small      |
| Bhutan       |    2124000 | Small      |
| Maldives     |     286000 | Small      |
+--------------+------------+------------+

Nulls và Zeros

Nếu biểu thức đầu tiên là NULL hoặc 0 , thì nó là false và giá trị thứ hai được trả về:

SELECT
    IF( 1, 'True', 'False' ) AS "1",
    IF( null, 'True', 'False' ) AS "Null",
    IF( 0, 'True', 'False' ) AS "Zero";

Kết quả:

+------+-------+-------+
| 1    | Null  | Zero  |
+------+-------+-------+
| True | False | False |
+------+-------+-------+

Ở đây, cột đầu tiên là true vì nó phân giải thành 1. Hai cột còn lại trả về đối số thứ hai, vì đối số đầu tiên của chúng là null0 tương ứng.

Đây là một ví dụ về cơ sở dữ liệu:

SELECT 
    Name,
    GNPOld,
    IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;

Kết quả:

+---------------------+-----------+------------------------------+
| Name                | GNPOld    | IF( GNPOld, GNPOld, 'None' ) |
+---------------------+-----------+------------------------------+
| Afghanistan         |      NULL | None                         |
| Albania             |   2500.00 | 2500.00                      |
| Algeria             |  46966.00 | 46966.00                     |
| American Samoa      |      NULL | None                         |
| Andorra             |      NULL | None                         |
| Angola              |   7984.00 | 7984.00                      |
| Anguilla            |      NULL | None                         |
| Antarctica          |      NULL | None                         |
| Antigua and Barbuda |    584.00 | 584.00                       |
| Argentina           | 323310.00 | 323310.00                    |
+---------------------+-----------+------------------------------+

Mặc dù trong trường hợp này, kết quả tương tự có thể đạt được với mã ít hơn một chút bằng cách sử dụng IFNULL() hoặc thậm chí là COALESCE() chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sao chép bảng trong MySQL

  2. PHP / MySQL Chèn giá trị rỗng

  3. Cách giới hạn hàng trong tập kết quả MySQL

  4. Chọn tất cả các cột bắt đầu bằng XXX bằng ký tự đại diện?

  5. Cột Đổi tên MySQL