selece 查询列表
from 表
join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段
limit offset,size
注: offset 要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
SELECT * FROM employees LIMIT 0 ,5 #如果是从 起始位置0开始的 可以不写
SELECT * FROM employees LIMIT 5
分页查询 写到最后面: limit也是最后才执行的
select * from employees WHERE commission_pct is not null ORDER BY salary desc limit 10
公式: 要显示的页数 page 每页的条目数size : limit ( page-1)*size , size
select 查询列表 from 表 limit
总结:
查询列表中涉及到的所有关键字 以及执行先后顺序
书写顺序:
select 查询列表 from 表 连接类型 join 表2 on 连接条件 where 筛选条件 group by 分组列表 having 分组后的筛选 order 排序列表 limit 偏移,条目数
执行顺序:
执行from 表 然后 进行join 形成了一个笛卡尔后的大型表
on 笛卡尔表基础之上 满足条件后 形成新的 虚拟表
然后 在这个新的表上进行筛选 where
进行分组 形成一个分组后的结果集 group by
对结果集进行筛选 having
走完having 之后进行select 选出来进行查看 打印显示出来
然后进行排序
排序之后进行分页显示
总结:每一条 都会形成一个新的表格
总结SQL99 语法:
1、 内连接
语法: select 查询列表 from 表1 别名 (inner) join 表2 别名 on 连接条件
where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 limit 子句
特点: 表的顺序可以调换 实现的效果就是 多表的交集部分
分类: 等值连接 非等值连接 自连接
2 、外连接:
语法: select 查询列表 from 表1 别名 left|right|full [outer] join 表2 别名 on 连接条件
where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 limit 子句
特点:
查询的结果 = 主表中所所有的行, 其中从表和它匹配的嫁给你希纳是匹配行,如果没有匹配的则显示null
left join right join
full join 两边都是主表
一般用于 查询除了交集部分的剩余的不匹配的行
交叉连接:
select 查询表名 from 表1 别名 cross join 表2 表名
类似于笛卡儿积
练习题:
案例 查询最低工资的员工姓名和工资
SELECT last_name, salary from employees where salary = (
select MIN(salary) from employees
)
案例 查询平均工资最低的部门信息和该部门的平均工资
第一步: SELECT AVG( salary ), department_id FROM employees GROUP BY department_id
第二步: SELECT department_id from employees GROUP BY department_id order by avg(salary) limit 1
整合 最后查询部门信息
SELECT * from departments
where department_id = (
SELECT department_id from employees GROUP BY department_id order BY AVG( salary ) limit 1 )