「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」
一、表结构和数据
1.首先我们先初始化一下表结构,以学生成绩表为例:
CREATE TABLE `score` (
`s_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`c_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`s_score` int(3) NULL DEFAULT NULL,
PRIMARY KEY (`s_id`, `c_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `score` VALUES ('01', '01', 80);
INSERT INTO `score` VALUES ('01', '02', 90);
INSERT INTO `score` VALUES ('01', '03', 99);
INSERT INTO `score` VALUES ('02', '01', 70);
INSERT INTO `score` VALUES ('02', '02', 60);
INSERT INTO `score` VALUES ('02', '03', 80);
INSERT INTO `score` VALUES ('03', '01', 80);
INSERT INTO `score` VALUES ('03', '02', 80);
INSERT INTO `score` VALUES ('03', '03', 80);
INSERT INTO `score` VALUES ('04', '01', 50);
INSERT INTO `score` VALUES ('04', '02', 30);
INSERT INTO `score` VALUES ('04', '03', 20);
INSERT INTO `score` VALUES ('05', '01', 76);
INSERT INTO `score` VALUES ('05', '02', 87);
INSERT INTO `score` VALUES ('06', '01', 31);
INSERT INTO `score` VALUES ('06', '03', 34);
INSERT INTO `score` VALUES ('07', '02', 89);
INSERT INTO `score` VALUES ('07', '03', 98);
INSERT INTO `score` VALUES ('1', '2', 300);
INSERT INTO `score` VALUES ('1', '3', 300);
INSERT INTO `score` VALUES ('1', '4', 300);
INSERT INTO `score` VALUES ('1003', '4', null);
INSERT INTO `score` VALUES ('1004', '3', null);
二、if else
IF(条件,条件成立的值,条件不成立的值) 类似 java的三目运算符。
SELECT
s_id,
s_score, --这个课可以不用查询出来下面的if else也能用
IF
( s_score > 80, '优秀', '良好' ) AS 等级 -- 这个等级就是别名,也能起成s_score
FROM
score
三、case when then
sql里的case when 和 java里的case 很像,但是功能更加的丰富。
SELECT
s_id,
s_score,--可以不用写,下面也能用
(CASE
WHEN s_score>=100 THEN '优秀'
WHEN s_score>=80 THEN '良好'
WHEN s_score>=60 THEN '中等'
ELSE'良好'
END ) 等级-- 等级只是一个别名而已
FROM
score
四、 IFNULL
IFNULL(colunm,'default value'), 如果 colunm 字典的数据为null ,则赋予一个默认值,下面展示一个例子,如图所示 s_id为 1003,1004的 s_score 字段为null,我们写一个sql给他一个默认值 没有成绩 的sql写法 如下: 数据示例:
SELECT
s_id,
IFNULL( s_score, '没有成绩' ) score
FROM
score