MySQL学习记录_使用技巧
导入数据
source xx.sql
需要在命令行执行,这个不是一个SQL
语句,需要在命令行执行。- 图形界面
MySQL 分页
- 常用分页语句
-- select * from table order by id limit (pageIndex - 1 )* pageSize , pageSize;
select * from table order by id limit 1000,10;
- 通过子查询分页,用于页数较大时
select * from table where id > (select id from table order by id limit 1000,1) order by id limit 10;
- 通过 join 实现
select * from table t1 join (select id from table order by id desc limit 1000,1) t2
where t1.id < t2.id
order by id desc
limit 10;
多表查询优 化
- 多表查询时,每个字段都指明其所在的表。
- 超过三个表禁止
join
,需要join
的字段,数据类型保持绝对一致。 - 多表关联查询时,保证被关联的字段需要有索引。
SQL 的执行顺序
from ...
join ... on ....
where ...
group by ....
having ....
select ....
order by ....
limit ...
from tab1 , tab2 -> on -> left/right join -> where -> group by -> having -> select -> distinct -> order by -> limit
根据 SQL 的执行顺序,可以得到
- 别名只能在 order by 使用,不允许在 where 子句中使用。
- 不包含聚合的函数应该写在 where 子句中,包含聚合函数的条件只能写在 having 子句中。
all 关键字的使用
-- 查询平均工资最低的部门ID
-- 自己写的,这个有问题,最小值可能有多条数据
select department_id from employees group by department_id order by avg(salary) asc limit 1;
-- 方式一 (三层子查询)
select department_id
from employees
group by department_id
having avg(salary) =
(select min(avg_sal) from (select avg(salary) avg_sal from employees group by department_id) t);
-- 方式二()
select department_id
from employees
group by department_id
having avg(salary) <= ALL (select avg(salary) avg_sal
from employees
group by department_id);