在一家公司面试,遇到了要在SELECT语句实现条件逻辑的问题,当时回答得不是很好一直挂念着,所以把这个功能梳理下。
题目简化
表 | 字段 |
student | id,name |
course | id,name |
scores | id,stud_name,cour_name,score |
目标表 | 学生名,课程名,是否及格 |
使用学生表、课程表和分数表,检索结果显示学生名、课程名和是否及格。
所以需要实现条件逻辑判断是否及格,有如下几种实现方式:
1. CASE WHEN ... THEN ...实现条件语句,格式如下
CASE
WHEN expression THEN return_value1
WHEN expression THEN return_value2
ELSE default_return_value
END
所以实现功能的SQL如下
SELECT student.name, course.name, (
CASE
WHEN scores.score<60 THEN '不及格'
ELSE '及格'
END
) AS pass
FROM student, course, scores
WHERE student.id=scores.stud_id AND course.id=scores.cour_id;
2. IF函数实现条件语句,格式如下
IF(条件表达式, 为真返回值, 为假返回值)
所以实现功能的SQL如下
SELECT student.name, course.name, IF(scores.score < 60, '不及格', '及格') AS pass
FROM student, course, scores
WHERE student.id=scores.stud_id AND course.id=scores.cour_id;
还要其他的能实现条件语句的功能,但是不适合实现上面SQL功能的,也列举一下
1.CASE column实现单个字段的值的枚举,格式如下
CASE column
WHEN value1THEN return_value1
WHEN value2 THEN return_value2
ELSE default_return_value
END
2.字符串的集合操作ELT()
ELT(N,str1,str2,str3,...)
如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小于 1 或大于参数的数量,返回 NULL。