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

–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

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐