EMPLOYEES员工练习题:问题:1、选择部门30中的雇员2、列出所有办事员的姓名、编号和部门3、找出佣金高于薪金的雇员4、找出佣金高于平均薪金60%的雇员5、找出部门10中所有经理和部门20中的所有办事员的详细资料6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金=2000的所有雇员的详细资料7、找出收取佣金的雇员的不同工作8、找出不收取佣金或收取的佣金低于100的雇员9、找出各月最后一天受雇的所有雇员10、找出早于25年之前受雇的雇员11、显示只有首字母大写的所有雇员的姓名12、显示正好为6个字符的雇员姓名13、显示不带有'R'的雇员姓名14、显示所有雇员的姓名的前三个字符15、显示所有雇员的姓名,用a替换所有'A'16、显示所有雇员的姓名以及满10年服务年限的日期17、显示雇员的详细资料,按姓名排序18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面21、显示在一个月为30天的情况下所有雇员每天能拿到多少薪金22、找出在(任何年份的)2月受聘的所有雇员23、对于每个雇员,显示其加入公司的天数24、显示姓名字段的任何位置,包含A的所有雇员的姓名25、以年、月和日显示所有雇员的服务年限:·年:求出总共的月/12-产生小数,并不能四舍五入·月:对12取余答案:1select*fromempwheredeptno=30;2selectename,empno,dnamefromempeinnerjoindeptdone.deptno=d.deptnowherejob=upper('clerk’);3select*fromempwherecommsal;4select*fromempwherecommsal*0.65SELECT*FROMEMPLOYEESWHERE(EMPLOYEE_IDIN(SELECTDISTINCTMANAGER_IDFROMEMPLOYEESWHEREDEPARTMENT_ID=30)ANDDEPARTMENT_ID=30)OR(MANAGER_IDIN(SELECTDISTINCTMANAGER_IDFROMEMPLOYEESWHEREDEPARTMENT_ID=90)ANDDEPARTMENT_ID=90);6select*fromempwhere(deptno=10andjob=upper('manager'))or(deptno=20andjob=upper('clerk'))or(jobupper(‘manager’)andjobupper(‘clerk’)andsal=2000)7selectdistinctjobfromempwherecomm0;8select*fromempwherenvl(comm,0)100;9select*fromempwherehiredate=last_day(hiredate);10select*fromempwheremonths_between(sysdate,hiredate)/1225;select*fromempwherehiredateadd_months(sysdate,-12*25);11selectenamefromempwhereename=initcap(ename);12selectenamefromempwherelength(ename)=613Selectenamefromempwhereenamenotlike‘%R%’;Selectenamefromempwhereinstr(ename,’R’)=0;14selectsubstr(ename,1,3)fromemp15Selectreplace(ename,’A’,’a’)fromemp16(1)Selectename,add_months(hiredate,12*10)‘服务年限的日期’fromemp(2)SELECTFIRST_NAME,CASEWHENADD_MONTHS(SYSDATE,-(12*15))HIRE_DATETHENHIRE_DATEELSENULLENDHIRE_DATEFROMEMPLOYEES;17Select*fromemporderbyename18Selectenamefromemporderbyhiredate19Selectename,job,salfromemporderbyjobdesc,salasc20(1)selectename,to_char(hiredate,'yyyy'),to_char(hiredate,'mm')fromemporderbyhiredateasc(2)SELECTFIRST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM')FROMEMPLOYEESORDERBYTO_CHAR(HIRE_DATE,'MM');21selectename,sal/30fromemp;22select*fromempwhereto_char(hiredate,'mm')='02';23(1)selectename,sysdate-hiredatefromemp--两个日期数据相减表示它们之间相差的天数(2)SELECTFIRST_NAME,TRUNC(SYSDATE)-TRUNC(HIRE_DATE)N_DAYFROMEMPLOYEES;24selectenamefromempwhereenamelike'%A%';selectenamefromempwhereinstr(ename,’A’,1)0;25Selectmonths_between(sysdate,hiredate)/12as“年”,months_between(sysdate,hiredate)as“月”,sysdate-hiredateas“日”fromemp--1、列出至少有一个雇员的所有部门--2、列出薪金比SMITH多的所有雇员--3、列出所有雇员的姓名及其直接上级的姓名--4、列出入职日期早于其直接上级的所有雇员--6、列出所有“CLERK”(办事员)的姓名及其部门名称--7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录--8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号--9、列出薪金高于公司平均水平的所有雇员--10、列出与“SCOTT”从事相同工作的所有雇员--11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金--12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金--13、列出每个部门的信息以及该部门中雇员的数量--14、列出所有雇员的雇员名称、部门名称和薪金--16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员--17、列出各种类别工作的最低工资--18、列出各个部门的MANAGER(经理)的最低薪金--19、列出按年薪排序的所有雇员的年薪--20、列出薪金水平处于第四位的雇员1、selectdepartment_id,count(1)fromemployeesgroupbydepartment_idhavingcount(1)1;2、selectename,salfromempwheresal(selectsalfromempwhereename=upper('smith'));3、selecte.ename,m.enamefromempe,empmwheree.mgr=m.empno(+);4、(1)selectenamefromempewherehiredate(selecthiredatefromempwhereempno=e.mgr);(2)SELECTE2.FIRST_NAME,E2.HIRE_DATE,E1.FIRST_NAMEBOSS,E1.HIRE_DATEFROMEMPLOYEESE1,EMPLOYEESE2WHEREE1.EMPLOYEE_ID=E2.MANAGER_IDANDE1.HIRE_DATEE2.HIRE_DATE;6、select*fromemployeese,jobsjwheree.job_id=j.job_id(+)andj.job_id='SA_MAN'7、(1)selectjob,min(sal)fromempgroupbyjobhavingmin(sal)1500;(2)selecte.employee_id,e.first_name,e.job_id,e.department_id,j.job_title,j.min_salaryfromemployeese,jobsjwheree.job_id=j.job_id(+)andj.min_salary50008、selectenamefromempwheredeptno=(selectdeptnofromdeptwheredname=uppder('SALES'))9、selectenamefromempwheresal(selectavg(sal)fromemp);10、selectenamefromempwherejob=(selectjobfromempwhereename=upper('scott'));11、selectename,salfromempwheresalin(selectsalfromempwheredeptno=30);12、selectename,salfromempwheresal(selectmax(sal)fromempwheredeptno=30);13、(1)selectd.deptno,dname,count(ename)fromdeptdleftjoinempeon(d.deptno=e.deptno)groupbyd.deptno,dname(2)selectd.department_id,d.department_name,count(e.employee_id)fromemployeese,departmentsdwhered.department_id=e.department_id(+)groupbyd.department_id,d.department_name14、Selecte.ename,d.dname,e.salfromempeleftjoindeptdon(d.deptno=e.deptno)16、Selectdept.deptno,dname,loc,count(empno)Fromdept,empWheredept.deptno=emp.deptno(+)Groupbydept.deptno,dname,loc17、Selectmin(sal)fromempgroupbyjob18、Selectdeptno,min(sal)fromempwherejob=upper(‘manager’)groupbydeptno19、select(sal+nvl(comm,0))*12asavnfromemporderbyavn20、Select*from(Selectename,sal,rank()over(orderbysaldesc)asgradefromemp)wheregrade=41.列出至少有一个员工的所有部门。(两个表联合查询,及groupby...having的用法)2.列出薪金比“SMITH”多的所有员工。(经典的自连接查询)3.列出所有员工的姓名及其直接上级的姓名4.列出受雇日期早于其直接上级的所有员工5.列出所有“CLERK”(办事员)的姓名及其部门名称。6.列出最低薪金大于1500的各种工作7.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门(以emp表为