第二份是上课的老师写的,你可以对比一下:
--1.选择部门30中的雇员.
select*fromempwheredeptno=30;
--2.列出所有办事员的姓名,编号和部门.
selectename,empno,deptnofromempwherejob='CLERK';
--3.找出佣金高于薪金的雇员.
select*fromempwherecomm>sal;
--4.找出佣金高于薪金的60%的雇员.
select*fromempwherecomm>sal*0.6;
--5.找出部门10中所有经理和部门20中所有办事员的详细资料.
select*fromempwhere(deptno=10andjob='MANAGER')or(deptno=20andjob='CLERK');
select*fromempwheredeptno=10andjob='MANAGER'
union
select*fromempwheredeptno=20andjob='CLERK';
--6.找出部门10中所有经理.部门20中所有办事员以及既不是
---经理又不是办事员但其薪金大于或等于2000的所有雇员的详细资料.
select*fromempwheredeptno=10andjob='MANAGER'
union
select*fromempwheredeptno=20andjob='CLERK'
union
select*fromempwheresal>=2000;
--7.找出收取佣金的雇员的不同工作.
selectdistinctjobfromempwherecommisnotnull;
--8.找出不收取佣金或收取的佣金低于100的雇员.
select*fromempwherecommisnullorcomm<100;
--9.找出各月最后一天受雇的所有雇员.
select*fromempwherehiredate=last_day(hiredate);
--10.找出早于12年前受雇的雇员.
select*fromempwheremonths_between(sysdate,hiredate)>144;
--11.显示只有首字母大写的所有雇员的姓名.
selectinitcap(ename)fromemp;
select*fromempwhereename=initcap(ename);
--12.显示正好为5个字符的雇员姓名.
selectenamefromempwherelength(ename)=5;
--13.显示不带有"R"的雇员姓名.
selectenamefromempwhereenamenotlike('%R%');
--14.显示所有雇员的姓名的前三个字符.
selectsubstr(ename,1,3)fromemp;
--15.显示所有雇员的姓名,用a替换所有"A"
selectreplace(ename,'A','a')fromemp;
--16.显示所有雇员的姓名以及满10年服务年限的日期.
selectename,add_months(hiredate,120)fromemp;
--17.显示雇员的详细资料,按姓名排序.
select*fromemporderbyename;
--18.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面.
selectename,hiredatefromemporderbyhiredate;
--19.显示所有雇员的姓名.工作的薪金,按工作内的工作的降序顺序排序,而工作按薪金排序.
selectename,job,salfromemporderbyjobdesc,sal;
--20.显示所有雇员的姓名的加入公司的年份和月份,按雇员受雇日所在月排序,
--并将最早年份的项目排在最前面.
selectename,to_char(hiredate,'yyyy-mon')fromemporderbyto_char(hiredate,'mon'),to_char(hiredate,'yyyy');
--21.显示在一个月为30天的情况所有雇员的日薪金,忽略余数.
selectename,trunc(sal/30)fromemp;
--22.找出在(任何年份的)2月受聘的所有雇员。
select*fromempwhereto_char(hiredate,'mm')='02';
--23.对于每个雇员,显示其加入公司的天数.
selectename,floor(sysdate-hiredate)as天数fromemp;
--24.显示姓名字段的任何位置包含"A"的所有雇员的姓名.
select*fromempwhereenamelike'%A%';
--25.以年.月和日显示所有雇员的服务年限.
selectename,to_char(hiredate,'yyyy.mm.dd')fromemp;
___________________________________________________
使用scott/tiger用户下的emp表完成下列练习,表的结构说明如下
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
------1.选择部门30中的所有员工.
select*fromempwheredeptno=30;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7844TURNERSALESMAN769808-9月-811500030
7900JAMESCLERK769803-12月-8195030
------2.列出所有办事员(CLERK)的姓名,编号和部门编号.
selectempno,ename,deptnofromempwherejob='CLERK';
EMPNOENAMEDEPTNO
------------------------------
7369SMITH20
7876ADAMS20
7900JAMES30
7934MILLER10
------3.找出佣金高于薪金的员工.
select*fromempwherenvl(comm,0)>sal;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030
------4.找出佣金高于薪金的60%的员工.
select*fromempwherenvl(comm,0)>(sal*0.6);
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030
------5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.
select*fromempwhere(deptno=10andjob='MANAGER')or(deptno=20andjob='CLERK');
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7782CLARKMANAGER783909-6月-81245010
7876ADAMSCLERK778823-5月-87110020
------6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.
select*fromemp
where(deptno=10andjob='MANAGER')
or(deptno=20andjob='CLERK')
or(jobnotin('MANAGER','CLERK')andsal>=2000);
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7876ADAMSCLERK778823-5月-87110020
7902FORDANALYST756603-12月-81300020
------7.找出收取佣金的员工的不同工作.
selectdistinctjobfromempwherenvl(comm,0)>0;
JOB
---------
SALESMAN
------8.找出不收取佣金或收取的佣金低于100的员工.
select*fromempwherenvl(comm,0)<100;
select*fromempwherecommisnullorcomm<100;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7566JONESMANAGER783902-4月-81297520
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010
这个不对:select*fromempwherecomm<100;
------9.找出各月倒数第3天受雇的所有员工.
select*fromempwherehiredate=last_day(hiredate)-2;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030
------10.找出早于12年前受雇的员工.
select*fromempwherehiredate
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7566JONESMANAGER783902-4月-81297520
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010
------11.以首字母大写的方式显示所有员工的姓名.
selectinitcap(ename)as姓名fromemp;
姓名
----------
Smith
Allen
Ward
Jones
Martin
Blake
Clark
Scott
King
Turner
Adams
James
Ford
Miller
------12.显示正好为5个字符的员工的姓名.
selectenamefromempwherelength(ename)=5;
selectenamefromempwhereenamelike'_____';
ENAME
----------
SMITH
ALLEN
JONES
BLAKE
CLARK
SCOTT
ADAMS
JAMES
------13.显示不带有"R"的员工的姓名.
selectenamefromempwhereenamenotlike'%R%';
ENAME
----------
SMITH
ALLEN
JONES
BLAKE
SCOTT
KING
ADAMS
JAMES
------14.显示所有员工姓名的前三个字符.
selectsubstr(ename,1,3)asenamefromemp;
ENAME
------
SMI
ALL
WAR
JON
MAR
BLA
CLA
SCO
KIN
TUR
ADA
JAM
FOR
MIL
------15.显示所有员工的姓名,用a替换所有"A"
selectreplace(ename,'A','a')as替换后fromemp;
selecttranslate(ename,'A','a')as替换后fromemp;
替换后
---------
SMITH
aLLEN
WaRD
JONES
MaRTIN
BLaKE
CLaRK
SCOTT
KING
TURNER
aDaMS
JaMES
FORD
MILLER
------16.显示满10年服务年限的员工的姓名和受雇日期.
selectename,hiredatefromempwheremonths_between(sysdate,hiredate)>120;
selectename,hiredatefromempwheresysdate>add_months(hiredate,120);
ENAMEHIREDATE
--------------------
SMITH17-12月-80
ALLEN20-2月-81
WARD22-2月-81
JONES02-4月-81
MARTIN28-9月-81
BLAKE01-5月-81
CLARK09-6月-81
SCOTT19-4月-87
KING17-11月-81
TURNER08-9月-81
ADAMS23-5月-87
JAMES03-12月-81
FORD03-12月-81
MILLER23-1月-82
不对:selectename,hiredatefromempwheremonths_between(hiredate,sysdate)>120;
------17.显示员工的详细资料,按姓名排序.
select*fromemporderbyename;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7876ADAMSCLERK778823-5月-87110020
7499ALLENSALESMAN769820-2月-81160030030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7902FORDANALYST756603-12月-81300020
7900JAMESCLERK769803-12月-8195030
7566JONESMANAGER783902-4月-81297520
7839KINGPRESIDENT17-11月-81500010
7654MARTINSALESMAN769828-9月-811250140030
7934MILLERCLERK778223-1月-82130010
7788SCOTTANALYST756619-4月-87300020
7369SMITHCLERK790217-12月-8080020
7844TURNERSALESMAN769808-9月-811500030
7521WARDSALESMAN769822-2月-81125050030
------18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.
selectename,hiredatefromemporderbyhiredate;
ENAMEHIREDATE
--------------------
SMITH17-12月-80
ALLEN20-2月-81
WARD22-2月-81
JONES02-4月-81
BLAKE01-5月-81
CLARK09-6月-81
TURNER08-9月-81
MARTIN28-9月-81
KING17-11月-81
JAMES03-12月-81
FORD03-12月-81
MILLER23-1月-82
SCOTT19-4月-87
ADAMS23-5月-87
------19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.
selectename,job,salfromemporderbyjobdesc,sal;
ENAMEJOBSAL
-----------------------------
WARDSALESMAN1250
MARTINSALESMAN1250
TURNERSALESMAN1500
ALLENSALESMAN1600
KINGPRESIDENT5000
CLARKMANAGER2450
BLAKEMANAGER2850
JONESMANAGER2975
SMITHCLERK800
JAMESCLERK950
ADAMSCLERK1100
MILLERCLERK1300
SCOTTANALYST3000
FORDANALYST3000
------20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.
selectename,to_char(Hiredate,'yyyy"年"mm"月"')as年月,hiredatefromemp
orderbyto_char(Hiredate,'mm'),to_char(Hiredate,'yyyy');
ENAME年月HIREDATE
------------------------------
MILLER1982年01月23-1月-82
ALLEN1981年02月20-2月-81
WARD1981年02月22-2月-81
JONES1981年04月02-4月-81
SCOTT1987年04月19-4月-87
BLAKE1981年05月01-5月-81
ADAMS1987年05月23-5月-87
CLARK1981年06月09-6月-81
MARTIN1981年09月28-9月-81
TURNER1981年09月08-9月-81
KING1981年11月17-11月-81
SMITH1980年12月17-12月-80
JAMES1981年12月03-12月-81
FORD1981年12月03-12月-81
selectename,to_char(Hiredate,'yyyy/mm')as年月,hiredatefromemp
orderbyto_char(Hiredate,'mm'),to_char(Hiredate,'yyyy');
------21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
selectename,trunc(sal/30)daysalfromemp;
ENAMEDAYSAL
--------------------
SMITH26
ALLEN53
WARD41
JONES99
MARTIN41
BLAKE95
CLARK81
SCOTT100
KING166
TURNER50
ADAMS36
JAMES31
FORD100
MILLER43
------22.找出在(任何年份的)2月受聘的所有员工。
select*fromempwhereto_char(hiredate,'mm')='02';
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
------23.对于每个员工,显示其加入公司的天数.
selectename,floor(sysdate-hiredate)totdaysfromemp;
ENAMETOTDAYS
--------------------
SMITH8721
ALLEN8656
WARD8654
JONES8615
MARTIN8436
BLAKE8586
CLARK8547
SCOTT6407
KING8386
TURNER8456
ADAMS6373
JAMES8370
FORD8370
MILLER8319
------24.显示姓名字段的任何位置包含"A"的所有员工的姓名.
select*fromempwhereenamelike'%A%';
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030
------25.以年月日的方式显示所有员工的服务年限.(大概)
selectempno,ename,('在职'||trunc((months_between(sysdate,hiredate))/12)||'年'
||trunc(mod((months_between(sysdate,hiredate)),12))||'个月'
||round(sysdate-(add_months(hiredate,months_between(sysdate,hiredate))))||'天')totfromemp;
selectto_char(to_date('0001-01-01','yyyy-mm-dd')+(sysdate-hiredate)-366-31,'yy:mm:dd')astotfromemp;