Oracle中select查询 分页 分组 统计语句

--ddl dml dcl dql
--查询语句
--特殊关键字:* , as distinct
select* from emp;--选取所有
select empno,ename from emp;--选取单个,逗号隔开
select empno id,ename name from emp;--取别名
select empno as id,ename as name from emp;--取别名,可以加上as,和上面结果一样
select empno 编号,ename 姓名 from emp;--取别名,可以用汉字
select empno "编号",ename "姓名" from emp;--取别名,关键字和汉字可以用引号
select distinct deptno from emp;--去除重复的
select dinstinct empno,deptno from emp;--去除empno和deptno合在一起重复的

select empno,sal,comm,88888 "红包" from emp;--常量
select empno,ename,sal || '美元' as money from emp;--运算符
select empno,ename,sal,comm,sal+comm+1 as money from emp;--相加都是空
select empno,ename,sal,comm||'补助' as money from emp;--和字符串拼接,空也变成字符串
select empno,ename,sal,comm,sal+nvl(comm,0) as money from emp;--将空用0代替

select ename,sal,mod((sal+2-2)*2/2,100) as money from emp;--可以用加减乘除,其他的用函数才可以,这里是取余数

select empno,ename,sal,comm from emp order by sal asc;--按sal升序排序
select empno,ename,sal,comm from emp order by sal desc;--按sal降序排序
select empno,ename,sal,comm from emp order by sal,comm desc;--按sal升序排序,如果相同,就按comm降序排
select empno,ename,sal,comm from emp order by 3,4 desc;--按sal升序排序,如果相同,就按comm降序排
select empno,ename,sal,comm from emp order by sal+nvl(comm,0);--按照sal和comm的和升序排

select* from emp where sal<1600;--小于1600的
select* from emp where sal>=1600;--大于等于1600的
select* from emp where sal<2000;--小于2000的
select* from emp where sal<=2000;--小于等于2000的
select* from emp where sal<>3000;--不等于3000的

select*from emp where sal>=1600 and sal<=3000;--选出sal在1600到3000的
select* from emp where sal between 1600 and 3000;--选出sal在1600到3000的
 --选出名字为JAMES ADAMS SMITH的人
select* from emp where ename='JAMES'or ename='ADAMS'or ename='SMITH';
 --选出名字为JAMES ADAMS SMITH的人
select* from emp where ename in('JAMES','ADAMS','SMITH');

select* from emp where substr(ename,1,1)='S';--找出S开头的名字
select* from emp where ename like 'S%';--找出S开头的名字,%代表所有任意个数字符
select* from emp where ename like '%N';--找出N结尾的名字
select* from emp where ename like '%T%';--找出含有T的名字
select* from emp where ename like '_C%';--找出第二个为C的名字,_代表任意一个字符

update emp set ename='sm%mm_tom' where empno=7369;
select* from emp where ename like '%\%%' escape '\';--找出有%的名字
select* from emp where ename like '%\_%' escape '\';--找出有_的名字

--找出comm为空的
select* from emp where comm is null;
--找出空和0的
select* from emp where nvl(comm,0)=0;
--找出不是S开始的
select* from emp where ename not like 'S%';
select* from emp where not (ename  like 'S%');
--找出没有这几个名字的人
select* from emp where ename not in('JAMES','ADAMS','SMITH');
select* from emp where not (ename in('JAMES','ADAMS','SMITH'));

--伪列,,不是写进去的,表自带的
select rowid,e.* from emp e;--自带的id列

select rownum, e.* from emp e;--自带的行号
--分页
select rownum, e.* from emp e  where rownum<6;--显示1到5的
select* from (select rownum num, e.* from emp e where rownum<=10) a where a.num>5;--显示5到10的

--分组
select* from emp;
select job from emp;
select distinct job from emp;--去除相同的

select job from emp group by job;--根据job分组
--统计函数,统计函数不统计null
--(1)根据job分组
--统计工资
select
       job,
       count(empno) 人数,
       sum(sal) 工资,
       avg(sal) 平均,
       max(sal) 最大,
       min(sal) 最小
from emp
group by job;
--统计奖金
select
       job,
       count(empno) 人数,
       sum(nvl(comm,0)) 奖金,
       avg(nvl(comm,0)) 平均,
       max(nvl(comm,0)) 最大,
       min(nvl(comm,0)) 最小
from emp
group by job;
--(2)根据部门统计
select
      deptno,
       count(empno) 人数,
       sum(sal) 工资,
       avg(sal) 平均,
       max(sal) 最大,
       min(sal) 最小
from emp
group by deptno;
         
--(3)根据部门和工作统计
select
      deptno,
      job,
      count(empno) 人数,
      sum(sal) 工资,
      avg(sal) 平均,
      max(sal) 最大,
      min(sal) 最小
from emp
group by deptno,job
order by deptno,job;
     
select
  deptno,
  count(empno) 人数,
  sum(sal) 工资,
  avg(sal) 平均,
  max(sal) 最大,
  min(sal) 最小
from emp
where deptno<>10--去除等于10的
group by deptno;       
       
select
  deptno,
  count(empno) 人数,
  sum(sal) 工资,
  avg(sal) 平均,
  max(sal) 最大,
  min(sal) 最小
from emp
group by deptno
having sum(sal)>9000;--留下大于9000的

       

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值