MySQL有rank关键字,建议将rank替换为`rank` 。不是单引号 是键盘1左边的符号。
rank():返回的相关等级会跳跃;
dense_rank():返回的相关等级不会跳跃;
row_number():返回的是行信息,没有排名;
select employee_name,
money,
rank() over(order by money) `rank`,
dense_rank() over(order by money) dense_rank,
row_number() over(order by money) row_number
from salary;
on:作用是作为生成临时表的条件 。
where:临时表生成后,作为筛选。
on是生成临时表时使用的条件,上面我们采用的是左外连接,左外连接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。也就是说emp是左表,dept是右表,条件是emp的deptno与dept中的deptno相等且为40时才连接,但emp表中不存在deptno为40的记录,也就是右表没有符合条件的记录,而记录不足的地方均用NULL来补充。
而where是在临时表生成好后,再对临时表进行过滤。也就是说emp表与dept的连接条件只是emp的deptno与dept中的deptno相等,然后在对生成的临时表进行筛选,由于emp表中不存在deptno为40的记录,所以未找到符合条件的记录。
由于内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所有在内连接时on和where的结果是相同的。而左外、右外与全连接由于它的特殊性,on和where造成的差别大小取决于表达式和表中的数据。
.datediff
DATEDIFF() 函数返回两个日期之间的天数。
SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
DiffDate
1
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate
DiffDate
-1