0%

数据库易错知识点

1.order by

(1)mysql对于执行顺序比较靠后的语句,如果出错了就不执行,而且不报错。

(2)按照查询出来的字段的别名排序也是可以的,不管别名是中文还是英文,只要不加单引号就行。

(3)ORDER BY 仅能处于SELECT语句的末尾.

补充:having后面跟的中文别名也不用加引号.

2.数据为空时候,count,sum返回结果不同

count返回值为0,sum返回值为空,使用的时候要进行简单的处理。

count函数只会对expr不为null的数据进行统计。

3.聚合函数使用

不能在 WHERE 子句中使用聚合函数。

可以在 HAVING 子句中使用聚合函数。

解释:因为聚合函数是对查询出来的结果集运算的,当在where子句使用聚合函数时,此时根据group by 分割结果集的子句还没有执行,此时只有from 后的结果集。所以无法在where子句中使用聚合函数。

4.分组函数

分组函数基本不计算null值。假如我们想要那些为null的也计入有效结果怎么办呢?很简单!使用IFNULL函数!

5.窗口函数row_number(),rank(),dense_rank()

在经典45题16题时使用rank() over(order by …)时报错

疑问点:

①rank() over(order by …)的使用位置是否在from之前

②如果要进行排名的字段是统计函数或者其他子查询的字段呢

语句如下:

1
2
3
4
5
6
7
select \*,RANK()over(order by '总分' desc)排名 from(

select SId sum(score) as '总分'

from sc

GROUP BY SId);

6.流程控制函数

case函数只返回第一个符合条件的值,剩下的case部分会被忽略

7.日期函数

now返回当前系统日期+时间

curdata返回当前日期,不包含时间

curtime返回当期时间,不包含日期

year/month/data:select year (curdata())

str_to_data:将日期格式字符转换为指定格式日期

data_format:将日期转化为字符

参考:https://blog.csdn.net/ZZQHELLO2018/article/details/92766462

原文链接

-------------本文结束元宝感谢您的阅读-------------