`

Oracle 常用练习 经典面试题

阅读更多

--1.选择部门30中的所有员工.
select * from emp where deptno = 30

--2.列出所有办事员(CLERK)的姓名,编号和部门编号.
select ename,empno,deptno from emp where job='CLERK'

--3.找出佣金高于薪金的员工.
select * from emp where comm>sal

--4.找出佣金高于薪金的60%的员工.
select * from emp where comm>(sal*0.6)

--5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.
select * from emp where (job='MANAGER' and deptno=10) or (job='CLERK' and deptno=20)

--6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.
select * from emp where (job='MANAGER' and deptno=10) or (job='CLERK' and deptno=20) or (job!='MANAGER' and job!='CLERK' and sal>=2000)

--7.找出收取佣金的员工的不同工作.
select distinct job from emp where comm>0

--8.找出不收取佣金或收取的佣金低于100的员工.
select * from emp where comm is null or comm<100

--9.找出各月倒数第3天受雇的所有员工.
select * from emp where hiredate=last_day(hiredate)-2
--last_day(date类型参数),返回一个月的最后一天

--10.找出早于12年前受雇的员工.
select * from emp where months_between(sysdate,hiredate)>=144
--months_between(date1,date2),返回两个日期之间的月份个数

--11.以首字母大写的方式显示所有员工的姓名
select initcap(ename) from emp
--initcap(string),返回首字母大写的字符串

--12.显示正好为5个字符的员工的姓名.
select ename from emp where length(ename)=5
--length(string),返回字符串的长度

--13.显示不带有"R"的员工的姓名.
select ename from emp where ename not like '%R%'

--14.显示所有员工姓名的前三个字符.
select substr(ename,1,3) from emp
/**//*substr(string,start,count),截取字符串长度,
start起始位数,count截取的位数,
如果不写count就是从start开始截取到最后*/

--15.显示所有员工的姓名,用a替换所有"A"
select replace(ename,'A','a') from emp
/**//*replace(string,if,then),字符串替换,用then替换if*/

--16.显示满10年服务年限的员工的姓名和受雇日期.
select ename,hiredate from emp where months_between(sysdate,hiredate)>=120

--17.显示员工的详细资料,按姓名排序.
select * from emp order by ename
--18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.
select ename,hiredate from emp order by hiredate

--19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.
select ename,job,sal from emp order by job desc,sal

--20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.
select ename, to_char(hiredate,'yyyy-mm') from emp order by to_char(hiredate,'mm'),to_char(hiredate,'yy')
--to_char(非string,'格式'),按格式把数据转换成字符类型,格式可以省略

--21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
select trunc(sal/30,0) from emp
--no四舍五入

--22.找出在(任何年份的)2月受聘的所有员工。
select * from emp where to_char(hiredate,'mm')=02

--23.对于每个员工,显示其加入公司的天数.
select trunc(sysdate-hiredate,0) from emp

--24.显示姓名字段的任何位置包含"A"的所有员工的姓名.
select ename from emp where ename like '%A%'

--25.以年月日的方式显示所有员工的服务年限. (大概)
select to_char(to_date('0001-01-01','yyyy-mm-dd') + (sysdate-hiredate) - 365 - 31 - 1,'yyyy-mm-dd') from emp

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics