Oracle高级查询例子

select*from emp;

select*from dept;

select*from salgrade;

select*from bonus;

 

createtable emp(

empnonumber(4)primarykey,

enamevarchar2(10),

job varchar2(9),

mgr number(4),

hiredatedate,

sal number(7,2),

comm number(7,2),

deptnonumber(2)

);

insertinto emp values(0001,'Jany','Teacher',1006,to_date('2012-1-1 0:0:0','syyyy-mm-dd hh24:mi:ss'),3000,460,61);

insertinto emp values(0002,'张','Engi',1006,to_date('2012-1-1 0:0:0','syyyy-mm-dd hh24:mi:ss'),8000,15000,62);

insertinto emp values(0003,'方','Compu',1008,to_date('2014-1-1 0:0:0','syyyy-mm-dd hh24:mi:ss'),12000,6000,63);

insertinto emp values(0004,'Jonn','Bana',1009,to_date('2015-1-1 0:0:0','syyyy-mm-dd hh24:mi:ss'),50000,100,64);

insertinto emp values(0005,'Jack','Mana',1019,to_date('2017-1-1 0:0:0','syyyy-mm-dd hh24:mi:ss'),3100,null,64);

commit;

select*from emp;

 

createtable dept(deptno number(2)primarykey,dname varchar2(4),loc varchar2(3));

insertinto dept values(61,'csb','one');

insertinto dept values(62,'csb1','two');

insertinto dept values(63,'csb2','thr');

insertinto dept values(64,'csb3','fou');

commit;

select*from dept;

 

createtable salgrade(grade number,losal number,hisal number);

insertinto salgrade values(1,2700,6000);

insertinto salgrade values(2,6001,10000);

insertinto salgrade values(3,10001,20000000);

commit;

select*from salgrade;

 

createtable bonus(ename varchar2(10),job varchar2(9),sal number,comm number);

insertinto bonus values('Jany','Teacher',3000,460);

insertinto bonus values('张','Engi',8000,15000);

insertinto bonus values('方','Compu',12000,6000);

insertinto bonus values('Jonn','Bana',50000,100);

commit;

select*from bonus;

--高级排序

--1.随机返回5条记录

select*from(select ename,job from emp orderby dbms_random.value())whererownum<=5;

--2.排序

select*from emp orderby comm desc;

--3.查询跳过表中的偶数行

select ename from(select row_number()over(orderby ename) rn,ename from emp) x wheremod(rn,2)=1;

--4.查询最大值和最小值

select ename,sal,max(sal)over(),min(sal)over()from emp;

--5.连续求和

--sum(sal) over(order by ename)指的是连续求和,是以ename来排序的

select ename,sal,sum(sal)over(),sum(sal)over(orderby ename)from emp;

--6.分部门连续求和

select deptno,sal,sum(sal)over(partitionby deptno orderby ename)as s from emp;

--7.得到当前行上一行或者下一行的数据 3000上移无,sal 3100 上移-->aaa 3100,,sal.3000下移-->bbb.3000

select ename,sal,lead(sal)over(orderby sal) aaa,lag(sal)over(orderby sal) bbb from emp;

--8.根据子串分组

select to_char(hiredate,'yyyy'),avg(sal)from emp groupby to_char(hiredate,'yyyy');

--9.确定一年内的天数

select add_months(trunc(sysdate,'y'),12)-trunc(sysdate,'y')from dual;


猜你喜欢

转载自blog.csdn.net/songpeiying/article/details/79849153