写的顺序:
select … from… where… group by… having… order by… limit [offset,] (rows)
执行顺序:
from… where…group by… having… select … order by… limit
sql语句的书写顺序:
select >> from >> where >> group by >> having >> order by >> limit
注意:
- select和from是必须的;
- where和having不能同时使用;
- having和group by联合使用;
sql语句的解析顺序 :
from >> on>> join >> where >> group by >> having >> select >> distinct >> order by >> limit
注意:虽然select在having后执行,但是mysql中仍然可以在having中使用select语句定义的别名
select [ALL | DISTINCT | DISTINCTROW | TOP] 字段
from 表
[inner join right join | left join 表2]
[on 连接条件]
[where 条件]
[group by 分组规则]
[having 分组条件]
[order by 排序规则]
[limit 分页规则]
INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。
工资表salaries
,不用ORDER求工资排名为n的工资
select s1.salary
from
salaries s1
join
salaries s2 on s1.salary<=s2.salary
and s1.to_date='9999-01-01' and s2.to_date='9999-01-01'
group by s1.salary
having count(distinct s2.salary)=n