case when
准备数据
CREATE TABLE COURSE
(
CNO VARCHAR(5) NOT NULL,
CNAME VARCHAR(10) NOT NULL,
TNO VARCHAR(10) NOT NULL
);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (103, '3-245', 86);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (105, '3-245', 75);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (109, '3-245', 68);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (103, '3-105', 92);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (105, '3-105', 88);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (109, '3-105', 76);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (101, '3-105', 64);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (107, '3-105', 91);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (101, '6-166', 85);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (107, '6-106', 79);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (108, '3-105', 78);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (108, '6-166', 81);
score表结果
sno cno degree
103 3-245 86.0
105 3-245 75.0
109 3-245 68.0
103 3-105 92.0
105 3-105 88.0
109 3-105 76.0
101 3-105 64.0
107 3-105 91.0
101 6-166 85.0
107 6-106 79.0
108 3-105 78.0
108 6-166 81.0
case when 语句使用
查询等级0-60 E ,……,90-10 A
求取值范围
select case when sc.degree between 90 and 100 THEN 'A'
when sc.degree between 80 and 90 THEN 'B'
when sc.degree between 70 and 80 THEN 'C'
when sc.degree between 60 and 70 THEN 'D'
when sc.degree between 0 and 60 THEN 'E'
else 'F'
end as grade,sc.*
from score sc
求单个值的
select sc.* , case degree when 75 then 'j'
when 86 then 'g'
else 'h'
end as bank
from score sc;
if 语句
类似于java的三目运算
简单if使用
SELECT IF(2>3,1,3) as '取值' -- 结果为3
SELECT IF(第一部分,第二部分,第三部分)
SELECT IF(2>1,1,3) as '取值' -- 结果为1
我们把这个分为三部分;第一部分的条件满足,则取值第二部分,反之则取第三部分;
if语句联合子查询
left语句
截取字段的部分信息
完整的数据
SELECT * FROM book
查询结果
1 三体 7 1 刘慈欣
2 Java概述 1 2 刘德泽
3 Java核心技术 1 3 王晨同
4 JavaSE 1 4 万浩波
5 JavaSSM 1 5 许鸿博
6 Ajax 1 6 徐鸿宝
7 飞鸟集 7 7 泰戈尔
8 简爱 2 8 夏洛蒂·勃朗特
9 国家政治经济学 3 8 科恩
10 琅琊榜 4 9 海晏
11 我本浪人 7 12 马天宇
使用语句查询后的结果
SELECT * FROM book WHERE LEFT(bname,1) not in ('j')
-- 查询的是书籍名第一个字不是j的结果
1 三体 7 1 刘慈欣
6 Ajax 1 6 徐鸿宝
7 飞鸟集 7 7 泰戈尔
8 简爱 2 8 夏洛蒂·勃朗特
9 国家政治经济学 3 8 科恩
10 琅琊榜 4 9 海晏
11 我本浪人 7 12 马天宇
12 MySQL 12 3 于敏
13 Html入门 12 4 周迪
LEFT(表的字段名,取前几个字)
right语句
SELECT * FROM book WHERE RIGHT(bname,1) !='l'
-- 查询的是书籍名最后字不是l的结果
1 三体 7 1 刘慈欣
2 Java概述 1 2 刘德泽
3 Java核心技术 1 3 王晨同
4 JavaSE 1 4 万浩波
5 JavaSSM 1 5 许鸿博
6 Ajax 1 6 徐鸿宝
7 飞鸟集 7 7 泰戈尔
8 简爱 2 8 夏洛蒂·勃朗特
9 国家政治经济学 3 8 科恩
10 琅琊榜 4 9 海晏
11 我本浪人 7 12 马天宇
13 Html入门 12 4 周迪
-- 原来数据中的编号12的MySQL已经没有了