/*

    连接查询

  */

--1、查询各个管理者的编号及其手下员工的最低工资,其中最低工资不能低于2000,没有管理者的员工不计算在内

--分析:找管理者手下的员工的最低工资,要将管理员底下的所有员工进行分组,在统计最低工资。

  select job,min(sal)

  from emp

  group by job

  having min(sal)>=2000;

 

--2查询所有部门的名称,loc,员工数量和工资平均值

--所有部门的名称必须从表dept中查询,而员工的数量和平均工资则必须从emp表中查询,所以该查询必须用到连接

select d.dname 部门名称,d.loc 部门地址,count(e.empno) 员工数量,round(avg(sal),0) 平均工资

from dept d,emp e

where d.deptno=e.deptno

group by d.dname,d.loc;

 

/******************************************************************/

 

      /*

         单行函数

      */

         --1、显示系统时间(取别名为“DATE”).

        select sysdate "DATE" from dual;

 

 --2.  查询员工号,姓名,工资(若为NULL则作为0处理),以及工资提高百分之20%后四舍五入到整数的结果(取别名为new salary)

         

select empno 员工号,ename 姓名,nvl(sal,0) 工资,nvl(sal,0)*1.2 工资提高 from emp;

 

 --3.  将员工的姓名(取别名为"Name")按字母表先后顺序排序,并写出姓名的长度(取别名为"length")

         

        select ename 员工姓名

        from emp

        order by ename asc;

 

--4.  查询各员工的姓名,并显示出各员工在公司工作了多少个月份(起别名为"worked_month")四舍五入到整数

select ename 员工姓名,round(months_between(sysdate,hiredate) ,0) 月份 from emp;

        

--5.  查询员工的姓名和工资,按下面的形式显示结果(工资字段必须为15位,空位用$填充)

         

         select ename,lpad(sal,15,'$') from emp;

         

 --7.  查询员工的姓名,以及在公司工作满了多少个月(worked_month),并按月份数降序排列

         --结论:必须是 字段名 is not null,这里字段名不能改成别名,如果想用别名 ,则重新生成一张表,

         --把别名改成字段名,这样就可以用别名了

          

select 姓名,月份

from(select ename 姓名,round(months_between(sysdate,hiredate),0) 月份 from emp)

order by 月份 desc;

 

--8.  做一个查询,按下面的形式显示结果  <ename> earns <sal> monthly but wants to<sal*3>

             

select ename||' earns '||sal||' monthly but wants to '||nvl(sal,0)*3 from emp;

 

--9.  做一个查询,按下面的形式显示结果   KING****

         

   select rpad(ename,length(ename)+round(sal/1000),'*' ) from emp;

 

--10、输出ename,job,grade 按对job进行级别分类

要求:  'PRESIDENT','A'

'MANAGER','B'

'ANALYST','C'

'SALESMAN','D'

 其它 'E'

        

Select ename 姓名,

job 职位,

decode(job,'PRESIDENT','A','MANAGER','B','ANALYST','C','SALESMAN','D','E') 级别  

from emp;