oracle练手题

--1、查询emp表中的所有信息
select * from emp;

--2、显示emp表的员工姓名和工资。
select ename,sal from emp;

--3、查询emp表中部门编号为20的并且sal(工资)大于3000的所有员工信息
select *
  from emp
 where deptno = 20
   and sal > 3000;

--4、查询emp表中部门编号为20的或者sal(工资)大于3000的所有员工信息
select *
  from emp
 where deptno = 20
    or sal > 3000;

--5、使用between and 查询工资在2000和4000之间的员工(用and 重新实现)
select * from emp where sal between 2000 and 4000;

select *
  from emp
 where sal >= 2000
   and sal <= 4000;

--6、使用in 查询 部门编号10,20的所有员工
select * from emp where deptno in(10,20);

--7、使用like查询所有名字中包括 W的员工信息
select * from emp where ename like '%W%';

--8、使用like查询所有员工名字中第二子字母为W的员工信息
select * from emp where ename like '_W%';

--9、查询所有员工信息并按照部门编号和工资进行排序
select * from emp order by deptno,sal;

--10、显示员工工资上浮20%的结果。
select emp.*,sal*1.2 as newSal from emp;

--11、显示EMP表的员工姓名以及工资和奖金的和。
select ename,sal,comm from emp;

select ename,sal+nvl(comm,0) as allSal from emp;

--12、显示DEPT表的内容,使用别名将表头转换成中文显示。     
select deptno as 部门编号, dname as 部门名称, loc as 地址 from dept;

--13、查询员工姓名和工资,并按工资从小到大排序。
select ename,sal from emp order by sal;

--14、查询员工姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
select ename,hiredate from emp order by hiredate desc;

--15、查询员工信息,先按部门编号从小到大排序,再按雇佣时间的先后排序。
select * from emp order by deptno,hiredate;

--16、按工资和入职月份的乘积排序(倒序)。
select extract(month from hiredate) as months, emp.empno from emp;

select tmp.months * sal as results
  from emp,
       (select extract(month from hiredate) as months, emp.empno from emp) tmp
 where emp.empno = tmp.empno
 order by results
--17、显示职务为“SALESMAN”的员工的姓名、职务和工资。
select ename,job,sal from emp where job='SALESMAN';

--18、显示工资大于等于3000的员工姓名、职务和工资。
select ename,job,sal from emp where sal>=3000;

--19、显示1982年以后雇佣的员工姓名和雇佣时间。
select * from emp where hiredate>to_date('1982-12-31','yyyy-MM-DD');

--20、显示部门编号为10的员工姓名和雇佣时间
select ename,hiredate from emp where deptno=10;

--21、显示工资在1000~2000之间(不包括1000和2000)的员工信息。
select * from emp where sal >1000 and sal <2000;

--22、显示部门10中工资大于1500的员工。
select * from emp where deptno=10 and sal >1500;

--23、显示职务为CLERK或MANAGER的员工信息。
select * from emp where job='CLERK' or job='MANAGER';

--24、显示部门10以外的其他部门的员工。
select * from emp where deptno not in  (10);

--25、显示部门10和部门20中工资小于1500的员工。
select * from emp where deptno in(10,20) and sal <1500;

PPT上已学查询:

--1、查询姓名首字母为“A”或第二个字符为“A”的所有员工信息
select * from emp where ename like 'A%' or ename like '_A%';

--2、查询部门20和30中的、岗位不是“CLERK”或“SALESMAN”的所有员工信息。
select * from emp where deptno in(20,30) and job not in ('CLERK','SALESMAN');

--3、查询出工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息。
    --按照hiredate的顺序,查看emp表
    select * from emp order by hiredate;

    --获得empno和截取对应的年份
    Select Extract(year from hiredate)as getYear,empno from emp;


    --查询出工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息
    select emp.*
      from emp,
           (Select Extract(year from hiredate) as getYear, empno from emp) tmp
     where emp.empno = tmp.empno
       and tmp.getYear = '1981'
       and sal between 2500 and 3500
       and (comm = 0 or comm is null);
   
--4、查询比平均员工工资高的员工信息。
 select * from emp where sal>(select avg(sal) from emp);

--5、查询平均工资高于2000的部门信息。
  --平均工资高于两千的部门编号
  select deptno from emp group by deptno having avg(sal) > 2000;
  --查询平均工资高于2000的部门信息
  select *
    from dept
   where deptno in
         (select deptno from emp group by deptno having avg(sal) > 2000);

--6、查询出WARD的工作所在地。
select loc
  from dept d, emp e
 where e.ename = 'WARD'
   and e.deptno = d.deptno;

--7、查询出工资比ADAMS高的所有人姓名、部门、所在地。
select  ename, dname, loc
  from emp e, dept d
 where sal > (select sal from emp where ename = 'ADAMS')
   and e.deptno = d.deptno;
   
select * from emp where sal>1100;

--8、查询工资排名第7的员工信息。
    --工资排名前七名
    select sal from (select sal from emp order by sal desc) where rownum < 8;
    --工资排名前七名,倒序
    select empno,sal from (select sal,empno from emp  order by sal desc) where rownum <8 order by sal;
    --工资排名第七名
    select empno
    from (select empno, sal
            from (select sal, empno from emp order by sal desc)
           where rownum < 8
           order by sal)
    where rownum = 1
    --工资排名第七名信息
    select *
    from emp
    where empno = (select empno
                    from (select empno, sal
                            from (select sal, empno from emp order by sal desc)
                           where rownum < 8
                           order by sal)
                   where rownum = 1)
--31、假定当前的系统日期是2013年11月13日,显示部门10员工的雇佣天数。
    --设置当前时间
    select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual;

    --获取雇佣天数和empno
    select tmp.nowDays - hiredate hasDays, empno
      from emp,
           (select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp

    --获取雇佣天数和员工详细信息
    select emp.*, (tmp.nowDays - hiredate) hasDays
      from emp,
           (select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp;
     
    --获取部门编号为10的员工详细信息和雇佣天数
    select emp.*, (tmp.nowDays - hiredate) hasDays
      from emp,
           (select to_date('2013-11-13', 'yyyy-MM-DD') as nowDays from dual) tmp
     where deptno = 10;

--32、显示员工姓名和雇佣的星期数

select ename, ceil(tmp.雇佣星期数) as hasWeek
  from emp,
       (select ((select to_date('2013-11-13', 'yyyy-MM-DD') from dual) -
               hiredate) / 7 as 雇佣星期数,
               empno
          from emp) tmp
  where emp.empno=tmp.empno;
--33、显示从本年1月1日开始到现在经过的天数。
    --获取时间  
    select to_char(sysdate, 'yyyy-MM-DD') as nowDays from dual;
    --获取本年的第一天    
    select to_date('2019-1-1', 'yyyy-MM-DD') as YearFirst from dual;
    --显示从本年1月1日开始到现在经过的天数
    select ceil(nowDays - YearFirst) hasDays
      from (select sysdate as nowDays,
                   to_date('2019-1-1', 'yyyy-MM-DD') as YearFirst
              from dual);
--34、查询所有员工的奖金,如果奖金没有,用0来替代
select emp.*,nvl(comm,0) newComm from emp;

 

 

你可能感兴趣的:(Oracle)