2018/12/18 oracle-sql练习

--查询入职日期在82年至85年的员工姓名,入职日期
select ename,hiredate from emp
where to_char(hiredate,'yy') between 82 and 85;
--查询月薪在3000到5000的员工姓名,月薪。
select ename,sal from emp
where sal between 3000 and 5000;
--查询部门编号为10或者20的员工姓名,部门编号。
select ename,deptno from emp
where deptno=10 or deptno=20;
--查询经理编号为7902,7566,7788的员工姓名,经理编号。
select ename,mgr from emp
where job='MANAGER' and mgr in (7902,7566,7788);

--查询员工姓名以w开头的员工姓名。
select ename from emp where ename like 'W%';
--查询员工姓名倒数第2个字符为T的员工姓名。
select ename from emp where ename like '%T_';
--查询奖金为空的员工姓名和奖金
select ename,comm from emp where comm is null;
--查询工资超过2000并且职位是MANAGER,
--或者职位是SALESMAN的员工姓名、职位、工资
select * from emp;
select ename,job,sal from emp
where sal>2000 and job='MANAGER' or job='SALESMAN';
--查询工资超过2000并且职位是MANAGER或者职位
--是SALESMAN的员工姓名、职位、工资
select ename,job,sal from emp
where sal>2000 and(job='MANAGER' or job='SALESMAN');

--查询部门在10或者20,并且工资在3000到5000之间的员工姓名、
--部门、工资。
select ename,deptno,sal from emp
where (deptno =10 or deptno=20)
and sal between 3000 and 5000;
--查询入职日期在81年,并且职位不会是
--SALES开头的员工姓名、入职日期、职位
select ename,hiredate,job from emp
where to_char(hiredate,'yy')='81'
and job not like 'SALES%';

--查询职位为SALESMAN或者MANAGER,部门编号
--为10或者20,姓名包含A的员工姓名、职位、部门编号
select ename,job,deptno from emp
where (deptno =10 or deptno =20) and
ename like '%A%';

--查询部门在20或30的员工姓名,部门编号,并
--按照工资升序排序。
select ename,deptno
from emp
where deptno=20 or deptno =30
order by sal asc;

--查询工资在2000-3000之间,部门不在10号的员工
--姓名,部门编号,工资,并按照部门升序工资降序排列
select ename,deptno,sal
from emp
where sal between 2000 and 3000
order by deptno asc,sal desc;
--查询入职日期在82年至83年之间,职位以SALES
--或者MAN开头的员工姓名,入职时间,职位
--并按照入职日期降序排序。
select ename,hiredate,job
from emp
where (to_number(to_char(hiredate,'yy'))
between 82 and 83)
and (job like 'SALES%' or job like 'MAN%')
order by hiredate desc;
select * from emp;
--查询入职时间在1982/7/9之后,并且不从事
--SALESMAN工作的员工姓名,入职时间,职业
select ename,hiredate,job
from emp
where job<>'SALESMAN'
and hiredate>to_date('1982/7/9','yy/mm/dd');
--查询员工姓名的第三个字母为A的员工姓名
select ename
from emp
where ename like '__A%';
--查询除了10,20部门编号的员工姓名和部门编号
select ename,deptno
from emp
where deptno not in(10,20);
--查询部门编号为30的员工信息,并且按照工资降序排序,再按照员工姓名升序排列
select * from emp
where deptno = 30
order by sal desc,ename asc;
--查询没有上级的(mgr为空)员工姓名
select ename
from emp
where mgr is null;
--查询工资大于等于4500并且部门编号为10,20的员工姓名,工资,部门编号
select ename,sal,deptno
from emp
where sal>=4500 and (deptno=10 or deptno=20);
--concat(expression1,expression2)连接两个字符串
select concat(ename,deptno)
from emp;
--upper(column)将字符串变大写
select empno,ename,deptno
from emp
where ename=UPPER('blake');
--substr(column,n)截取字符串从第n个开始的字符串
select substr(hiredate,4),length(hiredate)
from emp;
--写一个查询,用首字母大写,其他字幕小写显示雇员
--的ename,显示名字的长度,并给没列一个适当的标签,
--条件是满足所有雇员名字的开始字幕是J、A或M的
--雇员,并对查询结果的enam升序排序。
select initcap(ename) name,length(ename) name
from emp
where substr(ename,1,1)='J' or substr(ename,1,1)='A' or substr(ename,1,1)='M'
order by ename asc;
--lpadw()往hello向左添加world到第七位 (hello原本占五位,所以向左添加两位w和o,结果为wohello)
select lpad('hello',7,'world') from dual;
--rpad()往hello向右添加world到第七位(hello占五位,所以向右添加两位w和o,结果为hellowo)
select rpad('hello',7,'world') from dual;
--trim()去除字符串开头和结尾的空格
select trim('   d a  d  ')||trim('  wwwddwww') from dual;
select trim('h' from 'hhelhloh') from dual;--去除开头和结尾的‘h’字符。
--replace(abc,b,d)替换abc中的b为d
select replace('张辉民','辉','帅') from dual;
--instr(abc,b)查询b在abc中出现第一次的位置
select instr('Hello','l') from dual;

--查询员工姓名中中包含大写或小写字母A的员工姓名
select ename 包含A的名字
from emp
where upper(ename) like '%A%';
--查询部门编号为10或20,入职日期在81年5月1日之后,
--并且姓名中包含大写字母A的员工姓名,员工姓名长度
--(提示,要求使用instr函数不能使用like判断)
select ename 姓名,length(ename) 姓名长度
from emp
where instr(ename,'A')<>0;--instr函数中如果A不存在于ename则返回0

--查询每个职工的编号,姓名,工资
select rpad(empno,10,'*')||rpad(ename,10,'*')||lpad(sal,10,'*') empno_ename_sal
from emp;
--round(852.238,n)四舍五入后到第n位 结果为852.24
select round(852.238,2) from dual;

--trunc(852.238,n)截取到小数点后的第n位 结果为852.23
select trunc(852.238,2) from dual;

--mod(m,n)取m除n得到的余数
select mod(1600,300) from dual;--结果100
--四舍五入100.456到小数点第二位
select round(100.456,2) from dual;--100.46
--计算截断100.456第二位小数,第一位小数,整数的值
select trunc(100.456,2),trunc(100.456,1),trunc(100.456,0)
from dual;--100.45 100.4 100

猜你喜欢

转载自blog.csdn.net/zhm00136/article/details/85076979