oracle复杂查询(二)

(一)函数

在实际应用中,经常使用执行复杂查询的数理统计,经常需要你显示多张表的数据,利用数据分组MAX  ,MIN  AVG,SUM,COUNT 

如何显示所有员工中最高工资和最低工资?

SQL> select max(sal), min(sal) from emp ;

如何显示最高工资的员工姓名?

select ename ,sal  from emp where sal=(select max(sal)from emp );

SQL> select ename ,sal  from emp where sal=(select max(sal) from emp ) or sal =
(select min(sal)  from emp);


显示所有员工的平均工资和工资总和?

   select sal  "平均工资",(sal+nvl(comm,0))*12  "工资总和"      from emp;

计算有多少员工?

select  count (*) from emp;


显示工资高于平均工资的的员工的信息

select ename  ,sal,  deptno   from emp  where  sal >(select  avg(sal)  from  emp)   order by  sal;



(2)group by 和having子句

group  by 用于查询的结果分组统计

having 子句用于限制分组显示结果


如何显示每个部门的平均工资和最高工资?

select     deptno,max(sal) "部门最高工资",avg(sal) "部门平均工资"  from  emp  group by  deptno ;


显示每个部门的每种岗位的平均工资和最低工资

select  deptnojob,avg(sal) "部门平均工资",min(sal) "部门最低工资"  from   emp  group by  job,deptno;


显示平均工资低于2000的部门号和它的平均工资

select  avg(sal) "部门平均工资"   deptno   from emp    group  by   deptno  having  avg(sal)<2000;


总结:对数据分组

1·分组函数只能出现在选择列表,having,order by 子句中

2、如果select语句中同时包含有group  by,having,order by,那他们的出场顺序是group by ,having,order by 

3、在选择列中如果有列,表达式和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错  !!!

    例如:select  avg(sal) "部门平均工资"   deptno   from emp    group  by   deptno  having  avg(sal)<2000;



三、多表查询(多表查询的条件 =不能少于表的个数—1)

多表查询指的是基于两个和两个以上的表或是视图的查询,在实际中,查询单个表不能满足你的要求时(如显示sales部门位置和其员工姓名),这种情况下需要使用到dept表和emp表


显示雇员名,雇员工资及所在部门的名字[笛卡尔集]

select  emp.ename,emp.sal    ,dept.dname    from  emp a1 ,dpt a2    where a1.deptno = a2.deptno;【笛卡尔集】

注意:如果没有条件where a1.deptno = a2.deptno则会产56条记录

如何显示部门号为10的部门名,员工名和工资


select   dname,ename,sal  from  emp,dept  where  deptno=10;



显示各个员工的姓名,工资及其工资的级别

SQL> select  a1.ename,a1.sal,a2.grade  from  emp a1 ,salgrade a2   where a1.sal
between  a2.losal and a2.hisal ;


显示雇员名,雇员工资及所在部门的名字,并按部门排序。

SQL> select  a1.ename ,a1.sal, a2.dname   from   emp  a1 ,dept  a2   where a1.d
eptno = a2.deptno  order by  a2.deptno  ;


自连接:在同一张表的连接查询。

显示某个员工的上级领导的姓名?

SQL> select      a1.ename,  a2.empno from  emp a1, emp a2  where a1.mgr = a2.empno   and  a1.ename = 'FORD';

     

什么是子查询?

子查询就是嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询:指的是只返回一行数据的子查询语句


如何显示与SMITH同一个部门的所有员工?

select  ename  from  emp where deptno = (select  deptno from emp   where ename='SMITH');


多行子查询:指的是返回多行数据的子查询  

如何查询和部门10的工作相同的雇员的名字、岗位、工资、部门号?

select ename ,sal,deptno,job        from emp   where job in (select  job from emp where deptno='10');


多行子查询中使用all操作符和any操作符

请思考:如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

  SQL>select   ename,sal,deptno from  emp  where  sal> all(select  sal  from  emp   where deptno = 30);

或者如下:

SQL> select   ename,sal,deptno from  emp  where  sal> (select  max(sal)  from emp   where deptno = 30); 

如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号

SQL>select   ename,sal,deptno from  emp  where  sal> any(select  sal  from  emp   where deptno = 30);

或者如下:

SQL>select   ename,sal,deptno  from  emp  where  sal> (select min(sal)   from  emp   where deptno = 30);


多列子查询:

单行子查询是指子查询只返回单列、单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的而多列子查询则是指查询返回多个列的数据的子查询语句

 请思考:如何查询与SMITH的部门和岗位完全相同的所有雇员

select  * from  emp where (deptno ,job)= (select deptno ,job from emp  where ename='SMITH');

或者

SQL> select  * from  emp where (deptno ,job)= (select deptno ,job from emp  where ename='SMITH') ;


如何显示高于自己部门的平均工资的员工的信息??????

select  * from   emp , (select  deptno,avg(sal)    mysal  from emp  group  by   deptno )  a1   where emp.sal >a1.mysal  and emp.deptno = a1.deptno;


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值