Oracle初探(二)

基础查询

--1.查询部门编号为30的职务种类(不重复)
select job from emp where deptno=30;--重复

select distinct job from emp where deptno=30;--不重复

--2.创建一个查询,显示员工编号为7788的员工的姓名和部门编号
select ename,deptno from emp where empno=7788;

--3.查询工资高于3000的员工的姓名和薪资
select ename,sal from emp where sal>3000;

--4.查询工资低于3000的员工
select * from emp where sal<3000;

--5.查询在1981年2月20日和1985年5月1日之间入职的员工的姓名、职务和日期
select ename,job,hiredate from emp where hiredate between date'1981-2-20' and date'1985-5-1';

--6.显示在1981年聘用的每位员工的姓名和聘用日期
select ename,hiredate from emp where hiredate between date'1981-1-1' and date'1985-12-31';

--7.查询没有佣金的员工
select * from emp where comm is null;

--8.查询姓以B开头的员工
select * from emp where ename like 'B%';

--9.查询部门号为10或者20或者30的员工
select * from emp where deptno in(10,20,30);

--10.查询没有经理的所有员工的姓名和职称
select ename,job from emp where mgr is null;

--11.显示员工名字中的第三个字母为“A”的所有员工的姓名
select ename from emp where ename like '__A%';

--12.集合
--12.1 并集
--12.1.1 union
select ename,sal from emp where sal>1000
union
select ename,sal from emp where job='MANAGER';
--12.1.2 union all
select ename,sal from emp where sal>1000
union all
select ename,sal from emp where job='MANAGER';

--12.2 交集
select ename,sal from emp where sal>1000
intersect
select ename,sal from emp where job='MANAGER';

--12.3 剪集
select ename,sal from emp where sal>1000
minus
select ename,sal from emp where job='MANAGER';


--13.排序
--13.1 查询员工资料,按薪资升序排列
select * from emp order by sal asc;

--13.2 查询员工资料,在部门号从大到小的情况下按按薪资升序排列
select * from emp order by deptno desc, sal asc;

--13.3 按姓名的字母顺序显示部门20和部门50中的所有员工的姓名和部门编号
select ename,deptno from emp where deptno in(20,50)order by ename; 

--13.4 显示可以赚取佣金的所有员工的姓名、薪金和佣金,按薪金和佣金的降序对数据进行排序
select ename,sal,comm from emp where comm is not null order by sal desc,comm desc;


--14 函数
--14.1、显示当前日期
select sysdate from dual;

--14.2 显示当前日期,格式为****年**月**日,别名为hday
select substr(to_char(sysdate,'dl'),1,11) as hday from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日"') as hday from dual;

--14.3 编写一个查询,显示姓名以J、A或M开始的所有员工的姓名(第一个字母大写,其余字母小写)和姓名的长度,给每列一个合适的标签;
select concat(upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)))) as lname,length(ename)as len from emp where ename like 'J%' or ename like 'A%' or ename like'M%';

--14.4 计算每位员工截止到当前时间入职的星期数,别名为weeks_worked。按聘用的星期数对结果进行排序。该星期数舍入到最接近的整数。同时显示员工的名字;
select ename,round((sysdate - to_date(hiredate))/7)as weeks_worked from emp order by weeks_worked ;

--14.5 计算每位员工截止到当前时间入职的月数,别名为months_worked。该星期数舍入到最接近的整数。同时显示员工的名字。   
select ename,round(months_between(sysdate,to_date(hiredate)))as months_worked from emp order by months_worked ;

--14.6 查询在1981年2月20日和1987年5月1日之间入职的员工的姓名、职务标识和起始日期
select ename,job,hiredate from emp where hiredate<=to_date('1987-5-1','yyyy-mm-dd') and hiredate>=to_date('1981-2-20','yyyy-mm-dd');

--14.7 创建一个查询。显示所有员工的姓名和薪金。将薪金格式规定为15个字符长,左边填充$
select ename,lpad(sal,15,'$') from emp;                 

--14.8 显示员工的姓名、聘用日期和该员工在星期几开始工作的
select ename,hiredate,to_char(hiredate,'day')as start_worked from emp;

--14.9 使用decode函数编写一个查询,使其按照以下数据根据job列的值显示所有员工的级别,同时显示员工的姓名
select ename,job,decode(job,'PRESIDENT','A','MANAGER','B','ANALYST','C','SALESMAN','D','CLERK','E') as grade from emp;


--15.分组查询
--15.1 求所有员工的平均工资、最高工资、最低工资和工资总和,给予适当的别名
select avg(sal),max(sal),min(sal),sum(sal)
from emp;

--15.2 求每种工作的平均工资
select job,avg(sal) 
from emp
group by job;

--15.3 求每个部门中同一种工作的平均工资,同时显示部门号,按部门号升序显示
select deptno,avg(sal) 
from emp 
group by job,deptno 
order by deptno asc;

--15.4 查询出各部门的部门编号以及各部门的总工资和平均工资,按部门编号升序排列
select deptno,sum(sal),avg(sal) 
from emp 
group by deptno 
order by deptno;

--15.5 显示每种工作的人数
select job,count(*)
from emp 
group by job;

--15.6 显示员工最高工资超过3000的部门的id及其员工最高工资
select deptno,max(sal) 
from emp 
where sal>3000 
group by deptno;

--15.7 显示每种工作的最低、最高、总计和平均工资
select job,min(sal),max(sal),sum(sal),avg(sal) 
from emp 
group by job;

--15.8 确定经理的人数
select count(distinct mgr)
from emp;

--15.9 显示最高薪资和最低薪资的差别,标记为DIFFERENCE
select max(sal)-min(sal)as difference 
from emp;

--15.10 显示非销售人员(SALESMAN)工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000,输出结果按月工资和排序
select job,sum(sal)
from emp 
where job<>'SALESMAN' 
group by job 
having sum(sal)>5000 
order by sum(sal);

--15.11 显示经理编号以及该经理所管理员工的最低薪资。不包括其经理未知的任何员工。排除最低薪资不超过2000的所有组。按最低薪资降序对输出进行排序。
select mgr,min(sal)
from emp 
where mgr is not null 
group by mgr 
having min(sal)>2000 
order by min(sal) desc;

--15.12 显示在1981、1982、1980和1987年份每年聘用的员工总数,并按年号排序
select to_char(hiredate,'yyyy'),count(*)
from emp
group by to_char(hiredate,'yyyy')
order by to_char(hiredate,'yyyy');


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

馥影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值