1:WHERE在分组和聚集计算之前筛选行,而HAVING在分组和聚集之后筛选分组的行,因此WHERE子不能包含聚集函数。
2:而HAVING子句是在SELECT子前执行,因此一般不能在HAVING子句中使用select定义的别名。但是MySQL对此作了打展。在mysql 5.7.5之前的版本, ONLY FULL GROUP_ BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
3:如果ONLY_ FULL _GROUP. BY sql mode不开启,那么mysq|对标准SQL的扩展可以生效:
●允许在select、 having和order by中使用没有出现在group by中的字段。此时mysq|会随机选择没有出现在group by中的字段的值。
●允许在having中使用select定义的别名。
拆分表,可以节省存储空间,避免数据冗余,提升查询数据效率.
连接方式
内连接,左连接,右连接.(mysql)
mysql中实现全连接方法--左连接+右连接
mysql中实现左反连接,在左连接的基础上在使用筛选右表中为空值
mysql中实现右反连接,在右连接的基础上在使用筛选左表中为空值
多表查询
优先确定主表
没有明确表示维度完整性的情况下,优先保障度量的准确性
49 -- 查询manager的姓名、 所属部门名称和入职日期: ename , dname , job, hire
执行步骤如下:
5 select ename , dname, job, hiredate
1 from emp
3 inner join dept
2 on emp.deptno=dept . deptno
4 where job= ' manager' ;
语句执行顺序
FROM --WHERE-- GROUP BY-- HAVING-- SELECT-- ORDER BY-- LIMIT