oracle表查询2(6)

来源:互联网 发布:java redis缓存数据库 编辑:程序博客网 时间:2024/06/07 03:26

1.使用逻辑操作符号
示例:
查询工资高于500或是岗位为MANAGER的雇员,同时还要满足他们的姓名首写字母为大写的J
SQL>select * from emp where (sal>500 or job='MANAGER') and ename like'J%';

2.使用order by字句
示例:
如何按照工资 的从低到高的顺序显示雇员的信息
select * from emp order by sal;
如果是从高到低的
select * from emp order by sal desc;
按照部门号升序而雇员对的工资降序排列
select * from emp order by depton,sal desc;

使用列的别名排序
select ename,sal "年薪" from emp order by"年薪" asc;
别名需要使用“号圈中

3.在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据。
数据分组max(求最大值),min(求最小值),avg(求平均值),sun(求和),count(统计)

示例:
如何显示所有员工中最高工资,跟最低工资
select max(sal),min(sal) from emp;
如果要显示姓名活其他信息
select ename,sal from emp where sal=(select max(sal)from emp);

select ename,max(sal) from emp;这个是错误的,如果查询的有一个是分组函数,其他的必须也要是分组函数。

查询平均工资
select avg(sal) from emp;

查询工资低于平均工资的
select * from emp where sal<(select avg(sal) from emp);

4.group by和having子句
group by用于对子查询的结果分组统计
having子句用于限制分组显示结果

如何显示每个部门的平均工资和最高工资
SQL> select avg(sal),max(sal),deptno from emp group by deptno;

显示每个部门的每种岗位的平均工资和最低工资
SQL> select avg(sal),max(sal),deptno,job from emp group by deptno,job;

显示平均工资低于2000的部门号和他的平均工资
SQL> select avg(sal),max(sal),deptno from emp group by deptno havingavg(sal)>2000;

对分组函数的总结:
1。分组函数只能出现在选择列having、order by子句中
2.如果在select语句中同时包含有group by,having,order by 那么他们的顺序是group by,having,orderby
3.在选择列中如果有列、表达式、和分组函数,那么这些列和表达式必须有一个出现在group by字句中,否则会出错
如:select deptno,avg(sal),max(sal)from emp group by deptno having avg(sal)<2000;
这里deptno就一定要出现在group by中。

0 0
原创粉丝点击