示例数据库

MySQL的if,case语句使用总结

 

Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:

IF表达式

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值

1 SELECT  *,IF(langName='english','英语','非英语') AS languagetype FROM  languages

运行结果

MySQL的if,case语句使用总结

作为表达式的if也可以用CASE when来实现

1 SELECT *, CASE langName WHEN 'english' THEN '英语' ELSE '非英语'  END AS languagetype FROM languages

如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。例如:

SELECT CASE 1 WHEN 1 THEN 'one'
  WHEN 2 THEN 'two' 
   ELSE 'more' END
as testCol

将输出one

CASE when的基本用法(新建一个表来说明)

/*
 
mysql> select * from sales;
+-----+------------+--------+--------+--------+------+------------+
| num | name       | winter | spring | summer | fall | category   |
+-----+------------+--------+--------+--------+------+------------+
|   1 | Java       |   1067 |    200 |    150 |  267 | Holiday    |
|   2 | C          |    970 |    770 |    531 |  486 | Profession |
|   3 | JavaScript |     53 |     13 |     21 |  856 | Literary   |
|   4 | SQL        |    782 |    357 |    168 |  250 | Profession |
|   5 | Oracle     |    589 |    795 |    367 |  284 | Holiday    |
|   6 | MySQL      |    953 |    582 |    336 |  489 | Literary   |
|   7 | Cplus      |    752 |    657 |    259 |  478 | Literary   |
|   8 | Python     |     67 |     23 |     83 |  543 | Holiday    |
|   9 | PHP        |    673 |     48 |    625 |   52 | Profession |
+-----+------------+--------+--------+--------+------+------------+
9 rows in set (0.01 sec)
 
mysql> SELECT name AS Name,
    -> CASE category
    -> WHEN "Holiday" THEN "Seasonal"
    -> WHEN "Profession" THEN "Bi_annual"
    -> WHEN "Literary" THEN "Random" END AS "Pattern"
    -> FROM sales;
+------------+-----------+
| Name       | Pattern   |
+------------+-----------+
| Java       | Seasonal  |
| C          | Bi_annual |
| JavaScript | Random    |
| SQL        | Bi_annual |
| Oracle     | Seasonal  |
| MySQL      | Random    |
| Cplus      | Random    |
| Python     | Seasonal  |
| PHP        | Bi_annual |
+------------+-----------+
9 rows in set (0.00 sec)
 
 
*/
Drop table sales;
   
CREATE TABLE sales(
    num MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(20),
    winter INT,
    spring INT,
    summer INT,
    fall INT,
    category CHAR(13),
    primary key(num)
)type=MyISAM;
 
 
insert into sales value(1, 'Java', 1067 , 200, 150, 267,'Holiday');
insert into sales value(2, 'C',970,770,531,486,'Profession');
insert into sales value(3, 'JavaScript',53,13,21,856,'Literary');
insert into sales value(4, 'SQL',782,357,168,250,'Profession');
insert into sales value(5, 'Oracle',589,795,367,284,'Holiday');
insert into sales value(6, 'MySQL',953,582,336,489,'Literary');
insert into sales value(7, 'Cplus',752,657,259,478,'Literary');
insert into sales value(8, 'Python',67,23,83,543,'Holiday');
insert into sales value(9, 'PHP',673,48,625,52,'Profession');
 
select * from sales;
 
 
SELECT name AS Name,
CASE category
WHEN "Holiday" THEN "Seasonal"
WHEN "Profession" THEN "Bi_annual"
WHEN "Literary" THEN "Random" END AS "Pattern"
FROM sales;

代码