前言
2019-7-22,着手后端代码,以此篇记录
(一)、if 和 ifnull 区别
1、IF
语法: IF(expr1,expr2,expr3)
expr1:if的条件,例如,score >= 60
expr2:满足条件返回的值
expr3:不满足条件返回的值
示例:
如果分数大于等于60,就是"及格",否则"不及格"
IF(score >= 60 ,'及格','不及格')
2、IFNULL
语法: IFNULL(expr1,expr2)
expr1:不为NULL,返回的值
expr2:反之为NULL,返回的值
示例:
如果expr1不为NULL,则IFNULL(expr1,expr2),返回expr1;否则返回expr2。
SELECT IFNULL(1,0); -- 返回 1 ,因为1不为NULL
SELECT IFNULL('',1); -- 返回 '' ,因为''字符串不为NULL
SELECT IFNULL(NULL,'1'); -- 返回 1 ,因为第一个参数就是NULL
(二)、 left join
1、LEFT JOIN
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.col_name=table2.col_name
在一些数据库中, LEFT JOIN 用 LEFT OUTER JOIN, 也就是:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.col_name=table2.col_name
示例:
t_emp
| id | name | age |
|---|---|---|
| 1 | 李 | 24 |
| 2 | 王 | 26 |
| 3 | 张 | 28 |
t_score
| id | name | score | kid |
|---|---|---|---|
| 1 | 李 | 70 | 1 |
| 2 | 王 | 90 | 2 |
| 3 | 张 | 60 | 3 |
| 4 | 李 | 72 | 1 |
SELECT emp.*,sco.score
FROM t_emp emp
LEFT JOIN t_score sco
ON emp.id = sco.kid
| id | name | age | score |
|---|---|---|---|
| 1 | 李 | 24 | 70 |
| 2 | 李 | 24 | 72 |
| 3 | 王 | 26 | 90 |
| 4 | 张 | 28 | 60 |
(三)、 筛选出每一个对象的时间最新一条记录
1、Limit用法
如下表,我们需要过滤出同一个人最近时间的一条记录,比如 ‘ 6 张 2019-08-18 65 ’
我们先排序(把同名的排在一起,并按日期降序)排完之后再分组,重点在于 ‘LIMIT’ 否则日期过滤不出最近的
t_score
| id | name | do_date | score |
|---|---|---|---|
| 1 | 李 | 2019-08-22 | 70 |
| 2 | 李 | 2019-07-20 | 72 |
| 3 | 王 | 2019-08-25 | 90 |
| 4 | 张 | 2019-06-11 | 60 |
| 5 | 张 | 2019-08-18 | 65 |
| 6 | 张 | 2019-07-18 | 70 |
| 7 | 王 | 2019-06-25 | 85 |
SELECT *
FROM
(
SELECT *
FROM t_score
ORDER BY name,do_date DESC LIMIT 1000
)a
GROUP BY a.name
ORDER BY a.name 2019/8/27 17:18:34
Create by xd on 2019/7/23 18:40:05
Recently revised in 2019/8/27 17:18:47