【网学网提醒】:网学会员,鉴于大家对01_【基本SQL语句】SQL语法练习(一)十分关注,会员在此为大家搜集整理了“01_【基本SQL语句】SQL语法练习(一)”一文,供大家参考学习!
SQL语法练习(一)语法练习(
使用scott/tiger用户下的emp表(数据库自带的表)完成下列练习,表的结构说明如下:
雇员表雇员表(emp))
EMPEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNONUMBER(4)
VARCHAR2(10)VARCHAR2(9)NUMBER(4)DATENUMBER(7,2)NUMBER(7,2)NUMBER(2)
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
雇员编号雇员职务领导编号受雇日期工资奖金所属部门
1、选择部门30中的所有员工。SQL>select*fromempwheredeptno=30;MGRHIREDATEEMPNOENAMEJOBDEPTNO----------------------------------------------------------------------------------7499ALLENSALESMAN769820-2月-81307521WARDSALESMAN769822-2月-81307654MARTINSALESMAN769828-9月-81307698BLAKEMANAGER783901-5月-81307844TURNERSALESMAN769808-9月-81307900JAMESCLERK769803-12月-8130已选择6行。2、列出所有办事员(CLERK)的,编号和部门编号。SQL>select*fromempwherejob=upper('clerk');EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7369SMITHCLERK790217-12月-8020SALCOMMSALCOMM
160012501250
30050014002850
1500
0950
800
7876ADAMS207900JAMES307934MILLER103、找出佣金高于薪金的员工。
CLERKCLERKCLERK
778823-5月
-87
11009501300
769803-12月-81778223-1月-82
SQL>select*fromempwherecomm>sal;EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7654MARTINSALESMAN769828-9月-8130s4、找出佣金高于薪金的60%的员工。SQL>select*fromempwherecomm>(sal*0.6);EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7654MARTINSALESMAN769828-9月-8130SALCOMMSALCOMM
1250
1400
1250
1400
5、找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。部门编号为:10、20职务:MANAGER、CLERKSQL>select*fromempwhere(deptno=10ANDjob='MANAGER')OR(deptno=20ANDjob='CLERK')EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7369SMITHCLERK790217-12月-80207782CLARKMANAGER783909-6月-81107876ADAMSCLERK778823-5月-8720SALCOMM
80024501100
6、找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料。10Manager20CLERKsal>2000MANAGER、CLERKNOTk
SQL>select*fromempwhere(job<>'MANAGER'andjob<>'CLERK'ANDsal>2000)OR(deptno=10ANDjob='MANAGER')OR(deptno=20ANDjob='CLERK');EMPNOENAMEJOBMGRHIREDATEDEPTNO--------------------------------------------------------------
--------------------7369SMITHCLERK790217-12月-80207782CLARKMANAGER783909-6月-81107788SCOTTANALYST756619-4月-87207839KINGPRESIDENT17-11月-81107876ADAMSCLERK778823-5月-87207902FORDANALYST756603-12月-8120已选择6行。SALCOMM
80024503000500011003000
7、找出收取佣金的员工的不同工作。SQL>ed已写入fileafiedt.buf1*selectdistinctjobfromempwherecommisnotnullSQL>/JOB--------SALESMAN8、找出不收取佣金或收取的佣金低于100的员工。SQL>select*fromempwherecommisnullorcomm<100;EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7369SMITHCLERK790217-12月-80207566JONESMANAGER783902-4月-81207698BLAKEMANAGER783901-5月-8130SALCOMM
80029752850
7782CLARK107788SCOTT207839KING107844TURNER307876ADAMS207900JAMES307902FORD207934MILLER10已选择11行。
MANAGERANALYSTPRESIDENTSALESMANCLERKCLERKANALYSTCLERK
783909-6月756619-4月
-81-87
24503000500015000110095030001300
17-11月-81769808-9月-81778823-5月-87
769803-12月-81756603-12月-81778223-1月-82
9、找出各月倒数第3天受雇的所有员工。思路:求出现在月的最后一天last_daySQL>select*fromempwhere(last_day(hiredate)-2)=hiredate;MGRHIREDATEEMPNOENAMEJOBDEPTNO----------------------------------------------------------------------------------7654MARTINSALESMAN769828-9月-8130sSALCOMM
1250
1400
10、找出早于12年前受雇的员工。思路:先求出今年sysdateselect*fromempwhereto_char(sysdate,'yyyy')-12>to_char(hiredate,'yyyy');11、以首字母大写的方式显示所有员工的。Initcap单词首字母大写SQL>selectinitcap(ename)fromemp;INITCAP(EN---------SmithAllenWardJones
MartinBlakeClarkScottKingTurnerAdamsJamesFordMiller已选择14行。
12、显示正好为5个字符的员工的。长度:lengthSQL>select*fromempwherelength(ename)=5;EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7369SMITHCLERK790217-12月-80207499ALLENSALESMAN769820-2月-81307566JONESMANAGER783902-4月-81207698BLAKEMANAGER783901-5月-81307782CLARKMANAGER783909-6月-81107788SCOTTANALYST756619-4月-87207876ADAMSCLERK778823-5月-87207900JAMESCLERK769803-12月-8130已选择8行。SALCOMM
800160030029752850245030001100950
13、显示不带有“R”的员工的。SQL>select*fromempwhereenamenotlike'%R%';EMPNOENAMEDEPTNOJOBMGRHIREDATESALCOMM
----------------------------------------------------------------------------------7369SMITHCLERK790217-12月-80207499ALLENSALESMAN769820-2月-81307566JONESMANAGER78
3902-4月-81207698BLAKEMANAGER783901-5月-81307788SCOTTANALYST756619-4月-87207839KINGPRESIDENT17-11月-81107876ADAMSCLERK778823-5月-87207900JAMESCLERK769803-12月-8130已选择8行。14、显示所有员工的前三个字符。substrSQL>selectsubstr(ename,1,3)fromemp;
800160030029752850300050001100950
SUBSTR-----SMIALLWARJONMARBLACLASCOKINTURADAJAMFORMIL
15、显示所有员工的,用“a”替换所有“A”replace表示替换,指定的字符替换HELLOHhSQL>selectreplace('HELLO','H','h')fromdual;
REPLA----hELLO16、显示满10年服务年限的员工的和受雇日期。SQL>selectename,hiredatefromempwhere(to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy'))>=21;ENAMEHIREDATE-----------------------SMITH17-12月-80ALLEN20-2月-81WARD22-2月-81JONES02-4月-81MARTIN28-9月-81BLAKE01-5月-81CLARK09-6月-81KING17-11月-81TURNER08-9月-81JAMES03-12月-81FORD03-12月-81MILLER23-1月-82已选择12行。17、显示员工的详细资料,按排序。Select*fromempwhereorderbyename
18、显示员工的和受雇日期,根据其服务年限,将最老的员工排在最前面。Select*fromempwhereorderbyhiredate
19、显示所有员工的、工作和薪金,按工作的降序排序,若工作相同则按薪金排序。SQL>select*fromemporderbyjobdesc,sal;EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7521WARDSALESMAN769822-2月-81307654MARTINSALESMAN769828-9月-81307844TURNERSALESMAN769808-9月-8130SALCOMM
125012501500
50014000
7499ALLEN307839KING107782CLARK107698BLAKE307566JONES207369SMITH207900JAMES307876ADAMS207934MILLER107788SCOTT207902FORD20已选择14行。
SALESMANPRESIDENTMANAGERMANAGERMANAGERCLERKCLERKCLERKCLERKANALYSTANALYST
769820-2月-8117-11月-81783909-6月783901-5月783902-4月-81-81-81
1600
30050002450285029758009501100130030003000
790217-12月-80769803-12月-81778823-5月778223-1月756619-4月-87-82-87
756603-12月-81
20、显示所有员工的、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面。SysdateyyyySysdatemmSQL>select*fromemporderbyto_char(hiredate,'mm'),to_char(hiredate,'yy');EMPNOENAMEJOBMGRHIREDATEDEPTNO----------------------------------------------------------------------------------7934MILLERCLERK778223-1月-82107499ALLENSALESMAN769820-2月-81307521WARDSALESMAN769822-2月-81307566JONESMANAGER783902-4月-81207788SCOTTANALYST756619-4月-8720SALCOMM
13001600125030050029753000
7698BLAKE307876ADAMS207782CLARK107654MARTIN307844
TURNER307839KING107369SMITH207900JAMES307902FORD20已选择14行。
MANAGERCLERKMANAGERSALESMANSALESMANPRESIDENTCLERKCLERKANALYST
783901-5月778823-5月783909-6月769828-9月-81769808-9月-81
-81-87-8112501500
2850110024501400050008009503000
17-11月-81790217-12月-80769803-12月-81756603-12月-81
21、显示在一个月为30天的情况所有员工的日薪金,忽略余数忽略奖金,直接以基本工资为操作四舍五入ROUND不四舍五入(取整)TRUNCSQL>selectempno,ename,round(sal/30,0)fromemp;EMPNOENAMEROUND(SAL/30,0)----------------------------------7369SMITH277499ALLEN537521WARD427566JONES997654MARTIN427698BLAKE957782CLARK827788SCOTT1007839KING1677844TURNER507876ADAMS377900JAMES327902FORD1007934MILLER43已选择14行。
22、找出在(任何年份的)2月受聘的所有员工。Select*fromempwhereto_char(hiredate,'mm')=2
23、对于每个员工,显示其加入公司的天数。SQL>selectempno,ename,sysdate-hiredatefromemp;EMPNOENAMESYSDATE-HIREDATE-----------------------------------7369SMITH9660.407667499ALLEN9595.407667521WARD9593.407667566JONES9554.407667654MARTIN9375.407667698BLAKE9525.407667782CLARK9486.407667788SCOTT7346.407667839KING9325.407667844TURNER9395.407667876ADAMS7312.407667900JAMES9309.407667902FORD9309.407667934MILLER9258.40766已选择14行。
24、显示字段的任何位置包含“A”的所有员工的.Like
25、以年月日的方式显示所有员工的服务年限。(大概)