表table1内容:
表table2内容:
1,左外连接(右外同理)
SELECT t2.id,t2.name,t1.id,t1.name,t1.salary FROM table2 t2 LEFT JOIN table1 t1 ON t2.id=t1.dept_id;
语法:被连接的表名 别名 left join 连接的表名 别名 on 过滤条件
2、内连接
SELECT t2.id,t2.name,t1.id,t1.name,t1.salary FROM table2 t2 ,table1 t1 WHERE t2.id=t1.dept_id;
语法:被连接的表名 别名 ,连接的表名 别名 where 过滤条件
小结
内连接与外连接的区别
外连接:如果连接中没有匹配的,会将内容补为null
内连接:只会连接能够匹配的,不能匹配的不会显示
3、分组 group by
(按照表2id进行分组并显示每组中salary总数)
select t2.id ,t2.name,t1.id,t1.name,sum(t1.salary) total from table2 t2 left join table1 t1 on t2.id=t1.dept_id
group by t2.id;
运行流程:(1)运行from(2)运行group by (3)运行select
4、对分组内容过滤,having
(对分组后的内容进行过滤,过滤掉total<600的)
select t2.id ,t2.name,t1.id,t1.name,sum(t1.salary) total from table2 t2 left join table1 t1 on t2.id=t1.dept_id
group by t2.id having sum(t1.salary)>=600;
运行流程:(1)运行from(2)运行group by (3)运行having (4)运行select
5、排序 order by
(对分组过滤后的数据按照表2的id进行倒序排列)
select t2.id ,t2.name,t1.id,t1.name,sum(t1.salary) total from table2 t2 left join table1 t1 on t2.id=t1.dept_id
group by t2.id having sum(t1.salary)>=600
order by t2.id desc;
运行流程 :(1)运行from(2)运行group by (3)运行having (4)运行select(5)运行order by
6、分页查询 limit
(对排序后的内容进行分页查询)
select t2.id ,t2.name,t1.id,t1.name,sum(t1.salary) total from table2 t2 left join table1 t1 on t2.id=t1.dept_id
group by t2.id having sum(t1.salary)>=600
order by t2.id desc limit 1;
运行流程 :(1)运行from(2)运行group by (3)运行having (4)运行select(5)运行order by (6)运行limit