SQL——记录之旅

304 阅读2分钟

前言

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