1、在很多情况下需要考虑是否要去掉重复,如需要用distinct;
2、很多情况下子查询和表连接都可以解决问题,看你选择哪种方法;
3、对代码不够熟悉,经常出现逗号不该加,少加括号的问题、写错关键词等问题,尤其是每行末尾要加分号;
4、注意ifnull(字段,如无时展示什么)的使用;
5、使用year 提取日期时禁过度提取,先看下能否直接加减再用提取;
6、如何发现维度不够时,就进行多表相连>2,比如3个表,如一个人同时要看种成绩对比、选两种不一样的课之类的问题!
7、where 和 on的区别?可能存在和存在分别放在哪个的后面?where -->group by-->having
where 为行过滤,然后进行分组,分组后组过滤用having
8、注意:在用group by 进行筛选时要用having ,不用总是用where,且group by 字母分开,不要与python 弄混;
9、不存在,需要用not in,查询不在XX内的思路是,先查出在XX内的全部人或者课程,然后用 not in
10、左连接和内连接分别适用于什么场景下?
11、SQL成绩统计排名有个单独的写法,需要注意:赋值变量法
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量
第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……
注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
第三种用法:select 字段名1,字段名2 into @变量1,@变量2 from 表名 where ......
在函数或存储过程或触发器中,在不能使用set的时候推荐第三种,因为第二种会在执行时返回查询结果,这在函数或触发器中会报 “Not allowed to return a result set from a function”错误。而第三种则不会报错。
12、case when 外面可以用sum函数,详细了解case when 的全部写法;
1)select case 字段
when 条件,可以等于大于小于,可以并列and or then 结果
when 另一个条件 结果
else 结果
end as 别名,
其他字段,
from 表名
2)需要注意,如果用 字段
case when 这种写法 那字段后面需要加上逗号,相当于添加了一个新的字段
如:
select 字段,
case when 字段条件 then 结果
when 字段条件 then 结果
else 结果
end as 新字段
from 表名;
13、between和 and 的使用请注意between用在连续范围内,而and是一个并列的筛选条件;
14、mysql中 if 语句的用法
15、mysql中求长度的字符为:length字节长度,python为len,要注意区分;char_length():单位为字符