一条较完整的select语句
书写顺序
1,select
2,all|distinct 去重选项
3,from
4,join
5,on 联结条件
6,where 筛选
7,group by分组
8,having 为group by的分组结果筛选
9,order by 排序
10,limit 限制显示数量
执行顺序
1,from
2,join 确定要联结的表
3,on 确定联结条件
4,where 为联结后的表做筛选
5,group by 进行分组
6,having 筛选出需要的分组
7,select 确定要显示的字段
8,all|distinct 要不要去掉重复的值
9,order by 排序条件
10,limit 显示多少数据
完整语法
select [去重选项 all|distinct] 字段1[也可以用聚集函数对字段操作] [as 别名 或直接别名],字段2同前...
from 表1 [as 别名 或直接别名]
[ [[ [left|right][outer] ]或者 [inner] ][join 表2 [as 别名 或直接别名] ] [on 联结条件]]
where 过滤数据条件
group by 分组规则1[,分组规则2。。。]
[having 过滤分组条件]
order by 排序规则1 [asc升序默认,desc降序可选][,排序规则2 [asc升序默认,desc降序可选]...]
limit 限制显示数量
语法说明
1,select 必须写
2,去重选项 可以不写,默认不去重
3,字段或者字段操作,必须写,不同的字段列数必须要一致,因为聚集函数操作字段只返回一行
4,as为字段取别名,也可以不写as直接空格加别名,也可以不取别名
5,from 必须写
6,表1,必须写
7,其他表可以不写,如果写,要写联结模式
内联结,join或者inner join
左外联结,left join 或者 left outer join
右外联结,right join 或者 right outer join
8,on 联结条件,如果内联结的话可以不写,效果等价于直接where 后直接跟多个表,联结方式是笛卡尔积
如果外联结,就必须写上
9,where 过滤数据条件 可以不写
10,group by 分组规则 可以不写,符合排序规则的行分为一组
排序规则2可以不写,最终的分组结果满足所有排序规则
11,having,对单独分组的筛选
12,order by 排序规则1 可以不写
排序规则2可以不写,如果写,优先根据规则1排序,再根据规则2排序
13,limit 限制行数,可以不写
limit 10从第0行开始,输出10条数据,即0-9
limit 5,10 从第5行开始,输出10条数据,即4-13