ORACLE数据库查询(基础)
本文中,我们使用到ORACLE样例数据库中的三张表:
- 雇员表(EMP)
- 部门表(DEPT)
- 工资等级表(SALGRADE)
根据以上的三张表,我们来做以下的查询。
1.查询姓名前3个字母是JAM的雇员信息;
select *
from emp
where ename like 'JAM%';
结果:
2.查询所有10部门雇员的姓名,但是不显示每个雇员姓名的前3个字母;
select replace(ename,SUBSTR(ename,1,3),'***')
from emp
where emp.deptno = 10;
结果:
3.查询所有在其雇佣所在月的倒数第3天被公司雇佣的完整雇员信息;
select *
from emp
where hiredate = LAST_DAY(hiredate) - 2;
结果:
4.要求查询雇员姓名、职位、基本工资等信息,但是要求所有职位信息替换成中文显示。
select ename as "姓名",job as "职位",sal as "基本工资"
from emp
结果:
5.查询出生在1981年的雇佣的全部员工的编号、姓名、雇佣日期(按年-月-日显示)、工作、领导姓名、雇员月工资(基本工资+奖金),雇员工资等级,部门编码,部门名称,部门位置,并且要求这些雇员的月基本工资在1500-3500之间,将最后的结果按照年工资的降序排列,如果年工资相等,则按照工作时间进行排序。
select e.empno as "编号",e.ename as "姓名",TO_CHAR(e.hiredate,'yyyy-MM-dd') as "雇佣日期",
e.job as "工作",m.ename as "领导姓名",
e.sal+NVL(e.comm,0) as "月工资",salgrade.grade as "工资等级",
e.deptno as "部门编号",dept.dname as "部门名称",
dept.loc as "部门位置"
from emp e,emp m,dept,salgrade
where e.deptno = dept.deptno and e.mgr = m.empno
and e.sal between salgrade.losal and salgrade.hisal
order by "月工资" desc,e.hiredate;
结果:
#### 6.查询公司各个工资等级雇员的数量、平均工资
select salgrade.grade,COUNT(emp.empno),AVG(emp.sal)
from emp,salgrade
where emp.sal between salgrade.losal and salgrade.hisal
group by salgrade.grade
结果:
7.统计出领取佣金与不领取佣金的雇员的平均工资、平均雇佣年限、雇员人数;
select '不领佣金',COUNT(emp.empno),AVG(emp.sal),AVG(TRUNC((sysdate-hiredate)/365))
from emp
where emp.comm is null
UNION
select '领佣金',COUNT(emp.empno),AVG(emp.sal),AVG(TRUNC((sysdate-hiredate)/365))
from emp
where emp.comm is not null
结果:
8.查询非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且满足从事同一工作的雇员的月工资合计大于5000元,输出结果按照月工资的合计升序排列;
select job,SUM(sal)
from emp
group by job
having SUM(sal) > 5000
order by SUM(sal) ASC
结果:
基础样例演示就到这里。