/*
连接查询
*/
--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;