oracle 有关emp表的简单查询练习题_第1页
oracle 有关emp表的简单查询练习题_第2页
oracle 有关emp表的简单查询练习题_第3页
oracle 有关emp表的简单查询练习题_第4页
oracle 有关emp表的简单查询练习题_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL练习训练一1、查询dept表的结构在命令窗口输入descdept;2、检索dept表中的所有列信select*fromdept3、检索emp表中的员工姓名、月收入及部门编号selectename"员工姓名",sal"月收入",empno"部门编号"from注意查询字段用分号隔开。4、检索emp表中员工姓名、及雇佣时间日期数据的默认显示格式为“DD-MM-YY",如果希望使用其他显示格(YYYY-MM-DD)那么必须使用TO_CHAR函数进行转换。selectename"员工姓名",hiredate"雇用时间1",to_char(hiredate,'YYYY-MM-DD')"雇用时间2"from注意第一个时间是日期类型的在Oracle的查询界面它的旁边带有一日历。第二个时间是字符型的。易错点:不要将YYYY-MM-DD使用双引号5、使用distinct去掉重复行。检索emp表中的部门编号及工种,并去掉重复行。select distinctdeptno"部门编号",job"工种" fromemporderdeptno注意distinct放的位置为什么不放在from的前面翻译成汉语就明白了应该是:选择不重复的部门编号和工种从emp表。而不是:选择部门编和工种不重复地从emp表。这还是人话么O(∩_∩)O 哈哈~6、使用表达式来显示列检索emp表中的员工姓名及全年的月收入te"员工姓名,2"全年收入"m注意:防止提成comm为空的操作,使用nvl函数7、使用列别名用姓名显示员工姓名,用年收入显示全年月收入。selectename"员工姓名",sal*12"全年收入"from8、连接字符串在oracle中连接字符串用“||”操作符来完成的当连接字符串时如果字符串要加入数字值那么在“||”后可以直接指定数字,如果在字符串加入字符和日期值,必须要用单引号。检索emp表,用isa这个字符串来连接员工姓名和工种两个字段selectename||'isa'||job"他们各自的职位"from注意:用的是单引号9、使用WHERE子句检索月收入大于2000的员工姓名及月收入。selectename"姓名",sal"月薪"fromempwheresal>2000检索月收入在1000元到2000元的员工姓名、月收入及雇佣时间。te"姓名"l月薪e"雇佣时间"mpsalbetween1000and20001、like的用法:检索以S开头的员工姓名及月收入。selectename"员工姓名",sal"月收入"fromempwhereenamelike'S%''

检索员工姓名中的第三个字符是A的员工姓名及月收入。selectename"员工姓名",sal"月收入"fromempwhereenamelike注意这里A前面有两个通配符。且注意like后面使用的是单引1、在WHERE条件中使用IN操作符检索emp表中月收入是800的或是1250的员工姓名及部门编号te"姓名o部门编号l"工资"mpsalin(800,1250)注意:IN的意思是或者。是800或者1250而不是表示范围1、在WHERE条件中使用逻辑操作符(AND、OR、显示在部门20中岗位CLERK的所有雇员信select*fromempwheredeptno='20'and显示工资高于2500或岗位为MANAGER的所有雇员信息select*fromempwheresal>'2500'or注意:在where里面的条件都是使用的单引号1、查询表中是空值的数据检索emp表中有提成的员工姓名、月收入及提成。selectename姓名",comm提成",sal"工资"frompecommnotnull1、使用ORDERBY子句,进行排序。检索emp表中部门编号是30的员工姓名月收入及提成并要求其结按月收入升序、然后按提成降序显示。selectename"姓名",comm"提成",sal"工资"fromempdeptno='30'orderbysalasc,commdescSQL练习训练二1.查询工资大于1200的员工姓名和工资selectename"姓名",sal"工资"fromempwheresal>12002.查询员工号为7934的员工的姓名和部门号te"姓名o部门编号"mpe3.选择工资不在5000到12000的员工的姓名和工资te"姓名l"工资"mpeltnand12000注意:不是isnot4.选择雇用时间在1981-02-01到1981-05-01之间的员工姓名职位(job)和用时,按从早到晚排序.selectename"姓名",job"职位",hiredate"雇佣时间"fromempwherehiredatebetweenandto_date('1981-05-01','YYYY-MM-DD')orderbyhiredate总结:1,要转换为字符类型转换为日期类型否则无法比较2,1981-05-01要用单引号引起来否则报错——日期格式不够这个例子很重要5.选择在20或10号部门工作的员工姓名和部门号selectename"姓名",deptno"部门号"fromempwheredeptno('20','10')selectename"姓名",deptno部门号"fromempwheredeptnoin(20,10)加不加单引号都可以。那么有什么区别呢6.选择在1987年雇用的员工的姓名和雇用时间selectename"姓名",hiredate"雇佣时间"fromempto_char(hiredate,'YYYY')='1987'取出雇用时间的年份且转换为字符形式;然后与'1987'比较selectename"姓名",hiredate"雇佣时间"fromempto_char(hiredate,'MM')='04'selectename"姓名",hiredate"雇佣时间"fromempto_char(hiredate,'MM')='4'前者是可以的,后者不可以这个例子也很重要!7.选择公司中没有管理者的员工姓名及jobselectename"姓名",job"工作"fromempwheremgrisnull8.选择公司中有奖金(COMM不为空,且不为0)的员工姓名,工资和奖金比例按工资逆排,奖金比例逆排序.te"姓名l工资m"奖金比例mpeisnotnullandcomm!=0orderbysaldesc,commdesc9.选择员工姓名的第三个字母是a的员工姓名selectename"姓名"fromempwhereename='A'selectename"姓名"fromempwhereenamelike'总结:1,前者是错的,这样定死了:一共只有三个字母,且最后一个是A2,后者正确。表示A后的不限定这个例子也很重要,可以用于模糊查询oracle有关emp表的简单查询练习题使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate雇日/sal薪金/comm佣金/deptno部门编号)dept部门表(deptno部门编号/dname部门名称/loc地点工资=薪金+佣金--1、选择部门30中的雇员SELECT*FROMempWHEREdeptno=30;--2、列出所有办事员的姓名、编号和部门SELECTename,empno,deptnofromempWHEREUPPER(job)='CLERK'--3、找出佣金高于薪金的雇员SELECT*FROMempWHERENVL(comm,0)>sal--4、找出佣金高于薪金60%的雇员SELECT*FROMempWHERENVL(comm,0)>sal*0.6--5、找出部门10中所有经理和部门20中的所有办事员的详细资料Select*fromempwhere(deptno=10ANDjob=’MANAGER’)ORANDjob’CLERK’);--6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不办事员但其薪>=2000的所有雇员的详细资料t*mpe0D=’MANAGER’RD’CLERK’R=’MANAGER’D=’CLERK’D--7、找出收取佣金的雇员的不同工作SelectdistinctjobfromempwherecommISNOTNULL;--8、找出不收取佣金或收取的佣金低于100的雇员Select*fromempwherecommISNULLORNVL(comm,0)<100--9、找出各月倒数第三天受雇的所有雇员Select*fromempwherehiredate=(last_day(hiredate)-2);--10、找出早于25年之前受雇的雇SELECT*FROMempWHERETRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12)>25;--11、显示只有首字母大写的所有雇员的姓名SELECT*FROMempwhereT*MpEANDSUBSTR(ename,2,length-1)=LOWER(SUBSTR(ename,2,length-1));--12、显示正好为6个字符的雇员姓名SELECT*FROMempWHERELENGTH(ename)=6;--13、显示不带有'R'的雇员姓名notlikeSELECT*FROMempWHEREenameNOTLIKE‘%R%’;--14、显示所有雇员的姓名的前三个字符substrSELECTSUBSTR(ename,1,3)short_nameFROM--15、显示所有雇员的姓名,用a替换所有'A'replaceSELECTREPLACE(ename,’A’,’a’)FROMemp;--16、显示所有雇员的姓名以及满10年服务年限的日期SELECTename,ADD_MONTHS(hiredate,12*10)ten_yearsFROM--17、显示雇员的详细资料,按姓名排SELECT*FROMempORDERBYename;--18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面SELECTename,hiredateFROMempORDERBYhiredate;--19相同时按薪金升序SELECTename,job,salFROMempORDERBYjobDESC,sal;--20显示所有雇员的姓名和加入公司的年份和月份按雇员受雇日所在排序,将最早年份的项目排在最前面ASCSELECTename,TO_CHAR(hiredate,’YYYY’)||’年’TO_CHAR(hiredate,’MM’)||‘月’monthFROMempORDERTO_CHAR(hiredate,’MM’),TO_CHAR(hiredate,’YYYY’);--21、显示在一个月为30天的情况下所有雇员的日薪SELECTename,sal,ROUND(sal/30)FROMemp;--22、找出在(任何年份的)2月受聘的所有雇员SELECT*FROMempWHERETO_CHAR(hiredate,’MM’)=’02’;--23、对于每个雇员,显示其加入公司的天数SELECTTRUNC(sysdate-hiredate)DAYSFROM--24、显示姓名字段的任何位置,包含"A"的所有雇员的姓名instrSELECTDECODE(INSTR(ename,’A’),0,’未找到’,INSTR(ename,’A’))FROMemp;--25、以年、月和日显示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论