1. 程式人生 > 資料庫 >MySQL流程函式常見用法例項分析

MySQL流程函式常見用法例項分析

本文例項講述了MySQL流程函式常見用法。分享給大家供大家參考,具體如下:

流程函式是MySQL相對常用的一類函式,使用者可以使用這類函式在一個SQL語句中實現條件選擇,這樣能夠提高效率.

下面列出了MySQL跟條件有關的流程函式

函式 功能
IF(expr1,expr2,expr3) 如果expr1是真,返回expr2,否則返回expr3
IFNULL(expr1,expr2) 如果expr1不是NULL,返回expr1,否則返回expr2
CASE WHEN [value1] THEN[result1]… ELSE[default] END 如果value是真,返回result1,否則返回default
CASE [expr] WHEN [value1] THEN[result1]… ELSE[default] END 如果expr等於value1,否則返回default

下面的例子中模擬對職員進行分類,首先建立一個職員薪水錶:

create table salary(userid int,salary decimal(9,2));

插入一些測試資料

insert into salary values (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,null);

資料如下

mysql> select * from salary;
+--------+---------+
| userid | salary |
+--------+---------+
| 1 | 1000.00 |
| 2 | 2000.00 |
| 3 | 3000.00 |
| 4 | 4000.00 |
| 5 | 5000.00 |
| 1 | NULL |
+--------+---------+
6 rows in set (0.00 sec)

接下來,通過這個表來介紹各個函式的應用.

IF(expr1,expr3)函式: 這裡認為月薪在2000元以上的職員屬於高薪,用"high'表示; 而2000以下的職員屬於低薪,用'low'來表示.

mysql> select if(salary>2000,'high','low') from salary;    
+--------------------------------+
| if(salary>2000,'low') |
+--------------------------------+
| low              |
| low              |
| high              |
| high              |
| high              |
| low              |
+--------------------------------+
6 rows in set (0.00 sec)

IFNULL(expr1,expr2)函式: 這個函式一般用來替換NULL值,我們知道NULL值是不能參參與數值運算的,下面這個語句就是把NULL值用0替換.

mysql> select ifnull(salary,0) from salary;
+------------------+
| ifnull(salary,0) |
+------------------+
|     1000.00 |
|     2000.00 |
|     3000.00 |
|     4000.00 |
|     5000.00 |
|       0.00 |
+------------------+
6 rows in set (0.00 sec)

CASE WHEN [value1] THEN[result1]… ELSE[default] END函式:這裡可以用case when..then函式實現上面例子中高薪低薪的問題.

mysql> select CASE WHEN salary<=2000 THEN 'low' else 'high' END from salary;
+---------------------------------------------------+
| CASE WHEN salary<=2000 THEN 'low' else 'high' END |
+---------------------------------------------------+
| low                        |
| low                        |
| high                       |
| high                       |
| high                       |
| high                       |
+---------------------------------------------------+
6 rows in set (0.00 sec)

CASE [expr] WHEN [value1] THEN[result1]… ELSE[default] END函式:這裡還可以分為多種情況把職員的薪水分為多個檔次,比如下面的例子分成高、中、低3種情況。同樣可以分成更多種情況,這裡不再舉例了,有興趣的朋友可以自己測試一下

mysql> select CASE salary WHEN 1000 THEN 'low' when 2000 THEN 'mid' ELSE 'high' END from salary;
+-----------------------------------------------------------------------+
| CASE salary WHEN 1000 THEN 'low' when 2000 THEN 'mid' ELSE 'high' END |
+-----------------------------------------------------------------------+
| low                                  |
| mid                                  |
| high                                 |
| high                                 |
| high                                 |
| high                                 |
+-----------------------------------------------------------------------+
6 rows in set (0.00 sec)

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》

希望本文所述對大家MySQL資料庫計有所幫助。