欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于oracle数据库的emp表相关sql语句练习题分享

程序员文章站 2022-06-24 20:46:42
--1、选择部门10中的雇员 select * from emp where deptno = 10; --2、列出所有销售员的姓名、工资、提成 select ename, sal, comm fr...

--1、选择部门10中的雇员

select * from emp where deptno = 10;

--2、列出所有销售员的姓名、工资、提成

select ename, sal, comm from emp where job = 'salesman';

--3、找出佣金高于薪金60%的雇员

select ename from emp where comm > sal * 0.6; -- null是不参与运算的

--4、找出部门10中所有经理和部门20中的所有办事员的详细资料

select *

from emp

where (deptno = 10 and job = 'manager')

or (deptno = 20 and job = 'clerk');

--5、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料

select *

from emp

where (deptno = 10 and job = 'manager')

or (deptno = 20 and job = 'clerk')

or (job not in ('manager', 'clerk') and sal >= 2000);

select *

from emp

where (deptno = 10 and job = 'manager')

or (deptno = 20 and job = 'clerk')

or (job <> 'manager' and job <> 'clerk' and sal >= 2000);

--6、找出收取佣金的雇员的不同工作

select distinct job from emp where comm > 0; --null不参与运算,所以可以忽略

select distinct job from emp where nvl(comm, 0) > 0; --也可以都转换为数字类型,再进行比较

--7、找出不收取佣金或收取的佣金低于100的雇员

select * from emp where nvl(comm,0)<100;

--8、找出各月最后一天受雇的所有雇员

select * from emp where hiredate = last_day(hiredate);

--9、找出早于20年之前受雇的雇员

select * from emp where (sysdate-hiredate)>20*365; --不太严谨

select * from emp where months_between(sysdate, hiredate) / 12 > 20;

--10、显示只有首字母大写的所有雇员的姓名

select ename from emp where ename = initcap (ename); --initcap 首字母大写 lower 全小写 upper 全大写

--11、显示正好为6个字符的雇员姓名

select ename from emp where length(ename) = 6;

--12、显示不带有'r'的雇员姓名

select ename from emp where ename not like '%r%' --%代表任意一个或多个字符

select ename from emp where instr(ename,'r') = 0;

--instr((ename,'r') 截取字符串并返回该字符在的起始位置,返回0,证明没有该字符

--13、显示所有雇员的姓名的前三个字符

select substr(ename,0,3) from emp;

select substr(ename,1,3) from emp;

--15、显示所有雇员的姓名,用a替换所有'a'

select replace(ename,'a','a') from emp;

--16、显示所有雇员的姓名以及满10年服务年限的日期

select ename, add_months(hiredate,12*10) 服务年限的日期 from emp

--17、显示所有雇员的姓名、工作和薪金,按工作降序排序,而工作相同时按薪金升序

select ename,job,sal from emp order by job desc,sal asc;

--18、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面

select ename, to_char(hiredate, 'yyyy') y_date, to_char(hiredate, 'mm') m_date

from emp

order by y_date,m_date

select ename, to_char(hiredate, 'yyyy') , to_char(hiredate, 'mm')

from emp

order by hiredate

--19、找出在(任何年份的)2月受聘的所有雇员

select * from emp where to_char(hiredate,'mm')=2

--20、对于每个雇员,显示其加入公司的天数

select ename,months_between(sysdate, hiredate)*30 from emp;

select ename, sysdate - hiredate from emp;

--21、显示姓名字段的任何位置,包含 "a" 的所有雇员的姓名

select * from emp where ename like '%a%'

select * from emp where instr(ename,'a')>0

--22、分别以年、月和日方式显示所有雇员的服务年限

select ename,

months_between(sysdate, hiredate) / 12 年,

months_between(sysdate, hiredate) 月,

sysdate - hiredate 日

from emp