1.select 语句完整的查询顺序
select 字段
from 表1 别名
连接类型 join 表2 别名
on 连接条件
where 条件1
group by 分组字段
having 条件2(一般是分组条件)
order by 排序字段 (desc/asc)
limit 索引,最大查询数量;
-
查询语言执行
例图中 代码片段顺序从上到下执行
注: 别名可取可不取,灵活运用
from ...
join...on...
where ...
group by ...
having...
select ...
order by...
limit ...
- join 前后内容注意点
1. join前为连接内容、后为表名
inner :内连接
select 列名 from 左表 inner join 右表 on 从表.外键=主表.主键
left :左外连接
select 列名 from 左表 left join 右表 on 从表.外键=主表.主键
right :右外连接
select 列名 from 左表 right join 右表 on 从表.外键=主表.主键
- where 后续内容
5. 比较运算符: > < >= <= = <> != (都是不等于)
6. 逻辑运算符: and or not
a. in关键字: id = 1 or id =2 -> id in(1,2)
b. between关键字: age between 5 and 10; -> age>=5 and age <=10
c. like关键字(模糊查询) : name like '%马%'
1). _ 表示一个
2). % 表示0或多个
7. 注意: 不能跟着聚合函数
- group by 的注意事项
1. 聚合函数
a. 如果不在分组查询中,所有数据分为一组
b. 如果在分组查询中, 分组之后执行聚合函数
c. 常见聚合函数
1). sum 求和
2). avg 平均
3). count 统计
4). max/min 最大/最小
d. 注意: null不参与聚合运算的
2. select 后面只能跟 '被分组的列' 和 聚合函数
3. having 可以用来过滤聚合函数的判断条件
- select 的注意事项
注 : 尽量不要全表查询,尽量使用索引覆盖查询
7. 跟被查询的字段
8. * 代表该表所有字段
9. distinct 滤重: 只保存这个字段不同的值
10. 字段可以取别名 as(也可以省略)
- order by
默认为升序排序
1. order by 字段 desc : 根据字段值降序排序(asc是升序,可以省略)
2. order by 字段1 desc, 字段2 asc : 先根据字段1降序,如果字段1相等,根据字段2升序
- limit 索引,最大查询数量
limit 参数一 起始页
参数二 每页记录数
注 : 可再排序后加limit 使索引生效
-- 规律: 用户 查询第n页,每页count条
-- 当前页的sql如何编写
-- index = (n-1) * count
select * from student limit index,count;
MySQL查询流程图解