@SQLSQL
IF条件函数
分为IF函数嵌套和IF+聚合函数两类,主要是用来根据条件返回不同值。
1、if语句表达式
IF(条件表达式,值1,值2)
- 如果条件表达式为True,返回值1,为False,返回值2。
- 返回值可以是任何值,比如:数值,文本,日期,空值,NULL,数学表达式,函数等。
SELECT IF(TRUE,1+1,1+2);
-> 2
SELECT IF(FALSE,1+1,1+2);
-> 3
实例
1、实例1:查找出售价为 50 的书,如果是 java 书的话,就要标注为 已售完
select *,
if(book_name='java','已卖完','有货') as product_status
from book
where price =50
2、实例2:在学生表中,将1995年以后出生的学生划分为2班,将1995年(包括1995)之前的学生划分为1班,最后显示Sname,Sage,所在班级这三列。
select
Sname as '学生姓名',
Sage as '学生年龄',
IF(YEAR(Sage)<=1995,'1班','2班') as '所在班级'
from students
ORDER BY Sage;
2、IF函数嵌套
- 当分类大于两种或者以上时,就可以使用IF函数嵌套。
实例2:在学生表中,将学生编号小于等于3的学生,分为1班,学生编号在4-6的学生,分为2班,学生编号大于等于7的学生,分为3班,最后显示Sid,Sname,所在班级这三列。
select
Sid as '学生编号',
Sname as '学生姓名',
IF(
Sid <= 3,'1班',
IF(Sid >= 7,'3班','2班')
) as '所在班级'
from students
order by Sid
IF + 聚合函数
IF 还经常与聚合函数一起结合使用
实例3:将学生表和教师结合使用,计算班主任所带的学生数量,大于等于5人以上的显示:5人以上,人数小于5人的显示:5人以下。
select
t.Tname as '老师姓名',
count(*) as '人数',
IF(
count(*) >= 5,'5人以上','5人以下'
) as '分类'
from teachers as t
join students as s
using(Tid)
GROUP BY t.Tname
CASE语句
作为表达式的if也可以用CASE WHEN来实现:
SELECT IF(sva=1,"男","女") AS s FROM table_name
WHERE sva != '';
SELECT CASE sva
WHEN 1 THEN '男'
ELSE '女'
END AS s
FROM table_name
WHERE sva != '';