JAVA入门到精通-第62讲-复杂查询
Posted 夏至稻花如白练,大暑池畔赏红莲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA入门到精通-第62讲-复杂查询相关的知识,希望对你有一定的参考价值。
![](https://image.cha138.com/20210524/aef202af65e94793aea23571e11f4e1d.jpg)
每个部门的平均工资是不一样的;
--from子句中使用查询
分析:
1.首先要知道各个部门的平均工资
select avg(sal), deptno from emp group by deptno
![](https://image.cha138.com/20210524/60cdfe9d48574afd97d540d6d89553ba.jpg)
2.把上面的查询结果当做一个临时表对待
两张表,sal进行比较
![](https://image.cha138.com/20210524/c83c55d2339947bbb7472d213acb0098.jpg)
tem 临时表
tem表和emp表关联起来:
![](https://image.cha138.com/20210524/2a437918725e42f1911ec52d54dfbaf1.jpg)
给所在部门的平均工资取别名 myavg
![](https://image.cha138.com/20210524/d63b677db14d40ffad330b6e718c2ebf.jpg)
![](https://image.cha138.com/20210524/e64286ae500b47bb924813c6724c8b20.jpg)
![](https://image.cha138.com/20210524/8b7cc3f8bb674f17a5d4a48240a23294.jpg)
不给子查询取别名,会访问不到需要的字段;
--top ID *
![](https://image.cha138.com/20210524/b59656eba0594bce82fd7e0da44179bd.jpg)
top 取5到10个
top 后面的数表示要取出几条记录;
top挑出6条,从emp表来,编号不能在xxx里面 not in
排除不要的4个人,排除前4个人;
![](https://image.cha138.com/20210524/177342160e244211bdd5f4f989cfbc8c.jpg)
![](https://image.cha138.com/20210524/a21fd7339fff4bb5a93fd16c1da98612.jpg)
![](https://image.cha138.com/20210524/672276a2e62a4e0884d806dd3fbda86e.jpg)
![](https://image.cha138.com/20210524/a7f01cb264d44a7b8fbb909bd41f4f4a.jpg)
top查询:
100万条记录,1-2秒钟可以出结果
identity(1, 1)表示该字段testID字段自增长,从1,每次+1
通过这条语句进行疯狂地复制,用于压力测试;
insert into test (testName, testpass)
select testName, testpass
from test;
比如用于邮件服务器的压力测试;
![](https://image.cha138.com/20210524/e72d021fed15488095ffa31cbe573f1d.jpg)
字段越多,速度越慢;上百万的数据,分页查询,越到最后,速度越慢;
--如何删除一张表中的重复记录
![](https://image.cha138.com/20210524/686c9c116333411691e8c5a33a86b013.jpg)
1.select distinct * into #temp3 from cat
2.delete from cat
3.insert into cat select * from #temp3
4.drop table #temp3
![](https://image.cha138.com/20210524/f0a894ebc14d4516b17f7e04a0fbd0ef.jpg)
1.把cat表的记录distinct后的结果放入到临时表#temp3中
2.把cat表的记录清空
3.把#temp表的数据(没有重复的记录),插入到cat表中 ;
4.删除临时表#temp3
--左外连接和右外连接
![](https://image.cha138.com/20210524/26409aa54e674f8aa0af9e1f34f28e37.jpg)
-要求没有上级的人名字也要显示出来null
left join 左外连
where换成on
![](https://image.cha138.com/20210524/ad33d2df63d340f6a7c9a61f343f7a1b.jpg)
select w.ename, b.ename
from emp w left join emp b on w.mgr=b.empno
左外连接:
指左边的表的记录全部显示,
如果 没有匹配的记录就用null填
emp w 表的记录全部出现;
![](https://image.cha138.com/20210524/9b47d92f285a4119bdb2655683b1aeaa.jpg)
--内连接:只有匹配上的才会出现
inner join xx on
![](https://image.cha138.com/20210524/6b3d3a860b63474aa8b88b16a1643b0e.jpg)
--左外连接和右外连接
--思考题:显示公司每个员工和他的上级领导的名字
--内连接的处理方式(内连接只显示匹配的信息)
select worker.ename"员工名字",boss.ename"领导名字" from emp worker,emp boss where worker.mgr=boss.empno
--思考题:显示公司每个员工和他的上级领导的名字,没有上级领导的也要显示出来
--左外连接:指如果左边的表记录全部显示,如果没有匹配的记录,就用null填写
select worker.ename"员工名字",boss.ename"领导名字" from emp worker left join emp boss on worker.mgr=boss.empno
--右外连接:指如果右边的表记录全部显示,如果没有匹配的记录,就用null填写
select worker.ename"员工名字",boss.ename"领导名字" from emp worker right join emp boss on worker.mgr=boss.empno
以上是关于JAVA入门到精通-第62讲-复杂查询的主要内容,如果未能解决你的问题,请参考以下文章