oracle有关emp表的简单查询练习题.docx
- 文档编号:7581777
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:6
- 大小:18.68KB
oracle有关emp表的简单查询练习题.docx
《oracle有关emp表的简单查询练习题.docx》由会员分享,可在线阅读,更多相关《oracle有关emp表的简单查询练习题.docx(6页珍藏版)》请在冰豆网上搜索。
oracle有关emp表的简单查询练习题
SQL练习训练一
1、查询dept表的结构
在命令窗口输入:
descdept;
2、检索dept表中的所有列信息
select*fromdept
3、检索emp表中的员工姓名、月收入及部门编号
selectename"员工姓名",sal"月收入",empno"部门编号"fromemp注意查询字段用分号隔开。
4、检索emp表中员工姓名、及雇佣时间
日期数据的默认显示格式为“DD-MM-YY",如果希望使用其他显示格式
(YYYY-MM-DD,那么必须使用TO_CHAR函数进行转换。
selectename"员工姓名",hiredate"雇用时间
1",to_char(hiredate,'YYYY-MM-DD'"雇用时间2"fromemp
注意:
第一个时间是日期类型的,在Oracle的查询界面它的旁边带有一个日历。
第二个时间是字符型的。
易错点:
不要将YYYY-MM-DD使用双引号
5、使用distinct去掉重复行。
检索emp表中的部门编号及工种,并去掉重复行。
selectdistinctdeptno"部门编号",job"工种"fromemporderbydeptno
注意distinct放的位置
为什么不放在from的前面?
翻译成汉语就明白了
应该是:
选择不重复的部门编号和工种从emp表。
而不是:
选择部门编号和工种不重复地从emp表。
这还是人话么?
?
?
O(∩_∩O哈哈~
6、使用表达式来显示列
检索emp表中的员工姓名及全年的月收入
selectename"员工姓名",(sal+nvl(comm,0*12"全年收入"fromemp注意:
防止提成comm为空的操作,使用nvl函数
7、使用列别名
用姓名显示员工姓名,用年收入显示全年月收入。
selectename"员工姓名",sal*12"全年收入"fromemp
8、连接字符串
在oracle中连接字符串用“||”操作符来完成的,当连接字符串时,如果在字符串要加入数字值
那么在“||”后可以直接指定数字,如果在字符串加入字符和日期值,则必须要用单引号。
检索emp表,用isa这个字符串来连接员工姓名和工种两个字段
selectename||'isa'||job"他们各自的职位"fromemp
注意:
用的是单引号!
!
!
9、使用WHERE子句
检索月收入大于2000的员工姓名及月收入。
selectename"姓名",sal"月薪"fromempwheresal>2000
检索月收入在1000元到2000元的员工姓名、月收入及雇佣时间。
selectename"姓名",sal"月薪",hiredate"雇佣时间"fromempwheresalbetween1000and2000
10、like的用法:
检索以S开头的员工姓名及月收入。
selectename"员工姓名",sal"月收入"fromempwhereenamelike'S%'检索员工姓名中的第三个字符是A的员工姓名及月收入。
selectename"员工姓名",sal"月收入"fromempwhereenamelike'__A%'注意这里A前面有两个通配符。
且注意like后面使用的是单引号
11、在WHERE条件中使用IN操作符
检索emp表中月收入是800的或是1250的员工姓名及部门编号
selectename"姓名",deptno"部门编号",sal"工资"fromempwheresalin(800,1250
注意:
IN的意思是或者。
是800或者1250而不是表示范围
12、在WHERE条件中使用逻辑操作符(AND、OR、NOT
显示在部门20中岗位CLERK的所有雇员信息
select*fromempwheredeptno='20'andjob='CLERK'
显示工资高于2500或岗位为MANAGER的所有雇员信息
select*fromempwheresal>'2500'orjob='MANAGER'
注意:
在where里面的条件都是使用的单引号
13、查询表中是空值的数据
检索emp表中有提成的员工姓名、月收入及提成。
selectename"姓名",comm"提成",sal"工资"fromempwherecommisnotnull
14、使用ORDERBY子句,进行排序。
检索emp表中部门编号是30的员工姓名、月收入及提成,并要求其结果按月收入升序、然后按提成降序显示。
selectename"姓名",comm"提成",sal"工资"fromempwheredeptno='30'orderbysalasc,commdesc
SQL练习训练二
1.查询工资大于1200的员工姓名和工资
selectename"姓名",sal"工资"fromempwheresal>1200
2.查询员工号为7934的员工的姓名和部门号
selectename"姓名",deptno"部门编号"fromempwhereempno='7934'
3.选择工资不在5000到12000的员工的姓名和工资
selectename"姓名",sal"工资"fromempwheresalnotbetween5000and12000
注意:
不是isnot
4.选择雇用时间在1981-02-01到1981-05-01之间的员工姓名,职位(job和雇用时间,按从早到晚排序.
selectename"姓名",job"职位",hiredate"雇佣时间"
fromempwherehiredatebetweento_date('1981-02-01','YYYY-MM-DD'andto_date('1981-05-01','YYYY-MM-DD'
orderbyhiredateasc
总结:
1,要转换为字符类型转换为日期类型!
!
!
否则无法比较
2,1981-05-01要用单引号引起来!
!
!
否则报错——日期格式不够长这个例子很重要!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
5.选择在20或10号部门工作的员工姓名和部门号
selectename"姓名",deptno"部门号"fromempwheredeptnoin('20','10'
selectename"姓名",deptno"部门号"fromempwheredeptnoin(20,10加不加单引号都可以。
那么有什么区别
呢?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
6.选择在1987年雇用的员工的姓名和雇用时间
selectename"姓名",hiredate"雇佣时间"fromempwhere
to_char(hiredate,'YYYY'='1987'
取出雇用时间的年份且转换为字符形式;然后与'1987'比较
selectename"姓名",hiredate"雇佣时间"fromempwhere
to_char(hiredate,'MM'='04'
selectename"姓名",hiredate"雇佣时间"fromempwhere
to_char(hiredate,'MM'='4'
前者是可以的,后者不可
以?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
这个例子也很重要!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
7.选择公司中没有管理者的员工姓名及job
selectename"姓名",job"工作"fromempwheremgrisnull
8.选择公司中有奖金(COMM不为空,且不为0的员工姓名,工资和奖金比例,按工资逆排序,奖金比例逆排序.
selectename"姓名",sal"工资",comm"奖金比例"fromempwherecommisnotnullandcomm!
=0orderbysaldesc,commdesc
9.选择员工姓名的第三个字母是a的员工姓名
selectename"姓名"fromempwhereename='__A'
selectename"姓名"fromempwhereenamelike'__A%'
总结:
1,前者是错的,这样定死了:
一共只有三个字母,且最后一个是A
2,后者正确。
表示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’OR(deptno=20ANDjob=’CLERK’;
--6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料
Select*fromempwheredeptno=10ANDjob=’MANAGER’ORdeptno=20ANDjob=’CLERK’ORjob!
=’MANAGER’ANDjob!
=’CLERK’ANDsal>=2000;
--7、找出收取佣金的雇员的不同工作
SelectdistinctjobfromempwherecommISNOTNULL;
--8、找出不收取佣金或收取的佣金低于100的雇员
Select*fromempwherecommISNULLORNVL(comm,0<100
--9、找出各月倒数第三天受雇的所有雇员
Select*fromempwherehiredate=(last_day(hiredate-2;
--10、找出早于25年之前受雇的雇员
SELECT*FROMempWHERE
TRUNC(MONTHS_BETWEEN(sysdate,hiredate/12>25;
--11、显示只有首字母大写的所有雇员的姓名
SELECT*FROMempwhereename=INITCAP(ename;
SELECT*FROMempWHERESUBSTR(ename,1,1=UPPER(SUBSTR(ename,1,1ANDSUBSTR(ename,2,length-1=LOWER(SUBSTR(ename,2,length-1;
--12、显示正好为6个字符的雇员姓名length
SELECT*FROMempWHERELENGTH(ename=6;
--13、显示不带有'R'的雇员姓名notlike
SELECT*FROMempWHEREenameNOTLIKE‘%R%’;
--14、显示所有雇员的姓名的前三个字符substr
SELECTSUBSTR(ename,1,3short_nameFROMemp;
--15、显示所有雇员的姓名,用a替换所有'A'replace
SELECTREPLACE(ename,’A’,’a’FROMemp;
--16、显示所有雇员的姓名以及满10年服务年限的日期add_monthsSELECTename,ADD_MONTHS(hiredate,12*10ten_yearsFROMemp;--17、显示雇员的详细资料,按姓名排序SELECT*FROMempORDERBYename;--18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面ASCSELECTename,hiredateFROMempORDERBYhiredate;--19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序SELECTename,job,salFROMempORDERBYjobDESC,sal;--20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面ASCSELECTename,TO_CHAR(hiredate,’YYYY’||’年’year,TO_CHAR(hiredate,’MM’||‘月’monthFROMempORDERBYTO_CHAR(hiredate,’MM’,TO_CHAR(hiredate,’YYYY’;--21、显示在一个月为30天的情况下所有雇员的日薪金SELECTename,sal,ROUND(sal/30FROMemp;--22、找出在(任何年份的)2月受聘的所有雇员SELECT*FROMempWHERETO_CHAR(hiredate,’MM’=’02’;--23、对于每个雇员,显示其加入公司的天数SELECTTRUNC(sysdate-hiredateDAYSFROMemp;--24、显示姓名字段的任何位置,包含"A"的所有雇员的姓名instrSELECTDECODE(INSTR(ename,’A’,0,’未找到’,INSTR(ename,’A’FROMemp;--25、以年、月和日显示所有雇员的服务年限SELECTTRUNC(MONTHS_BETWEEN(sysdate,hiredate/12YEAR,TRUNC(MONTHS_BETWEEN(sysdate,hiredateMONTH,TRUNC(sysdate-hiredateDAYFROMemp;
超难问题:
求出所有在闰年被雇佣的雇员信息。
思路:
求出被雇佣年的第一天,再加一个月,变成2月1日,再求该月最后一天,最后比较它是不是29日?
(另一个思路,按照year/4考虑SELECT*FROMempWHERETO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(hiredate,’YYYY’,1,’DD’=’29’;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 有关 emp 简单 查询 练习题