1. Every derived table must have its own alias
这句话是说派生表必须取一个别名
场景重现:
SELECT SUM(cou_id)
FROM (
SELECT stu_id, cou_id
FROM score
WHERE cou_id=1 OR cou_id=2
)
GROUP BY stu_id
执行结果:
应修改为:
SELECT SUM(cou_id)
FROM (
SELECT stu_id, cou_id
FROM score
WHERE cou_id=1 OR cou_id=2
)c
GROUP BY c.stu_id
2.描述 字段避免命名为“desc”,非要用就加上``
3.SQL脚本 字段避免命名为“sql”,非要用就加上``
4.mybatis中使用like+concat组合防止SQL注入,如何防止?如果like a传入a的值为"’%t%’ OR 1=1"
5.COUNT(NULL)值为0,但是COUNT(0)不一定为0
如:
SELECT stu_id,COUNT(IF(sc < 60, 1, 0))
FROM score
GROUP BY stu_id
和
SELECT stu_id,COUNT(IF(sc < 60, 1, null))
FROM score
GROUP BY stu_id
前者count计算出每个stu_id的记录数,IF条件基本等于没用,后者算出每个stu_id对应sc<60的记录数
6.GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前. HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)
7.除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
注:6和7参考: group by与where,having以及顺序.