oracle练习题及答案
Oracle经典练习题及标准答案

oracle经典练习sql/*1、选择在部门30中员工的所有信息*/select * from scott.emp where deptno = '30'/*2、列出职位为(MANAGER)的员工的编号,姓名*/select empno, ename from scott.emp where job = 'MANAGER'/*3、找出奖金高于工资的员工*/select * from scott.emp where comm > sal/*4、找出每个员工奖金和工资的总和*/select ename, sal + nvl(comm, 0) from scott.emp/*5、找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK) */select *from scott.empwhere deptno = '10'and job = 'MANAGER'unionselect *from scott.empwhere job = 'CLERK'and deptno = '20'/*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工*/ select *from scott.empwhere job != 'MANAGER'and job != 'CLERK'and sal > 2000/*7、找出有奖金的员工的不同工作*/select distinct(job) from scott.emp where comm is not null/*8、找出没有奖金或者奖金低于500的员工*/select *from scott.empwhere comm is not nulland comm > 500/*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面*/select enamefrom scott.emporder by (months_between(sysdate, hiredate) / 12) descselect ename,hiredate from scott.emp order by hiredate/*10、找出每个月倒数第三天受雇的员工*/select * from scott.emp where hiredate = last_day(hiredate) - 2/*11、分别用case和decode函数列出员工所在的部门,deptno=10显示'部门10',deptno=20显示'部门20'deptno=30显示'部门30'deptno=40显示'部门40'否则为'其他部门'*/select ename,case deptnowhen 10 then'部门10'when 20 then'部门20'when 30 then'部门30'when 40 then'部门40'else'其他部门'end 工资情况from scott.empselect ename,decode(deptno,10,'部门10',20,'部门20',30,'部门30',40,'部门40','其他部门') 工资情况from scott.emp/*12、分组统计各部门下工资>500的员工的平均工资*/select avg(sal) from scott.emp where sal > 500 group by deptno/*13、统计各部门下平均工资大于500的部门*/select deptno from scott.emp group by deptno having avg(sal) > 500 /*14、算出部门30中得到最多奖金的员工奖金*/select max(comm) from scott.emp where deptno = 30/*15、算出部门30中得到最多奖金的员工姓名*/select enamefrom scott.empwhere deptno = 30and comm = (select max(comm) from scott.emp where deptno = 30) /*16、算出每个职位的员工数和最低工资*/select count(ename), min(sal), job from scott.emp group by job/*17、列出员工表中每个部门的员工数,和部门no */select count(ename), deptno from scott.emp group by deptno/*18、得到工资大于自己部门平均工资的员工信息*/select *from scott.emp ewhere sal > (select avg(sal) from scott.emp where e.deptno = deptno)select *from scott.emp e1,(select avg(sal) sals, deptno from scott.emp group by deptno) e2where sal > salsand e1.deptno = e2.deptno/*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */select avg(nvl(comm,0)), sum(sal + nvl(comm, 0))from scott.empgroup by deptno,job/*20、笛卡尔集*/select * from scott.emp, scott.dept/*21、显示员工ID,名字,直属主管ID,名字*/select empno,ename,mgr,(select ename from scott.emp e1 where e1.empno = e2.mgr) 直属主管名字from scott.emp e2/*22、DEPT表按照部门跟EMP表左关联*/select *fromscott.dept, scott.empwherescott.dept.deptno = scott.emp.deptno(+)/*23、使用此语句重复的内容不再显示了*/select distinct (job) from scott.emp/*24、重复的内容依然显示*/select *from scott.empUNION ALLselect * from scott.emp/*23和24题和22题是一样的*//*25、只显示了两个表中彼此重复的记录。
Oracle基础练习题及答案(聚合函数)

Oracle基础练习题及答案(聚合函数)分组函数1.查询公司员工工资的最大值,最小值,平均值,总和select max(sal),min(sal),avg(sal),sum(sal) from emp;2.查询各job的员工工资的最大值,最小值,平均值,总和select job,max(sal),min(sal),avg(sal),sum(sal) from emp group by job;3.选择具有各个job的员工人数(提示:对job进行分组)select job,count(ename) from emp group by job;4.查询员工最高工资和最低工资的差距(DIFFERENCE)select max(sal)-min(sal) from emp;5.查询各个管理者手下员工的最低工资,其中最低工资不能低于800,没有管理者的员工不计算在内select a.mgr,min(a.sal) from emp a,emp b wherea.mgr=b.empno group by a.mgr;6.查询所有部门的名字dname,所在位置loc,员工数量和平均工资select dname,loc,count(ename),avg(sal) from emp a,dept b where a.deptno(+)=b.deptno group by dname,loc;7.查询公司的人数,以及在1980-1987年之间,每年雇用的人数,结果类似下面的格式total 1980 1981 1982 198730 3 4 6 7select distinct(select count(ename) from emp) "total",(select count(ename) from emp where hiredate>=to_date('19800101','yyyymmdd') and hiredate<="" bdsfid="82" p="">(select count(ename) from emp where hiredate>=to_date('19810101','yyyymmdd') and hiredate<=""bdsfid="84" p="">(select count(ename) from emp where hiredate>=to_date('19820101','yyyymmdd') and hiredate<="" bdsfid="86" p="">(select count(ename) from emp where hiredate>=to_date('19870101','yyyymmdd') and hiredate<="" bdsfid="88" p="">from emp;。
oracle练习题及答案

oracle练习题及答案1. 找出各月倒数第3 天受雇的所有员工select ename from emp where last_day(hiredate)-2=hiredate;2. 找出早于12 年前受雇的员工select ename from emp where months_between(sysdate,hiredate)>=144;3. 以首字母大写的方式显示所有员工的姓名select initcap(ename) from emp;4. 显示正好为5 个字符的员工的姓名select ename from emp where length(ename)=5;5. 显示不带有“R”的员工姓名select ename from emp where instr(ename,'R',1,1) =0;6. 显示所有员工姓名的前三个字符select substr(ename,1,3) from emp;7. 显示所有员工的姓名,用“a”替换所有的“A”select ename,replace(ename,'A','a') from emp;8. 显示满10 年服务年限的员工的姓名和受雇日期select ename,hiredate from emp where months_between(sysdate,hiredate)>=120;9. 显示员工的详细资料,按姓名排序select * from emp order by ename desc;10. 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面select ename,hiredate from emp order by hiredate;11. 显示所有员工的姓名、工作和薪金,按照工作的降序排序,若工作相同则按薪金排序select ename,job,sal from emp order by job desc, sal;12. 显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面select ename, to_char(hiredate,'yyyy') h, to_char(hiredate,'mm') m from emp order by m,h; 13. 显示在一个月为30 天的情况所有员工的日薪金,忽略余数select trunc(sal/30) from emp;14. 找出在(任何年份的)2 月受聘的所有员工select ename from emp where to_char(hiredate,'mm')=2;15. 对于每个员工显示其加入公司的天数select ename, sysdate-hiredate from emp;16. 显示姓名字段的任何位置包含“A”的所有员工姓名select ename from emp where instr(ename,'A',1,1) <>0;select ename from emp where ename like '%A%';。
Oracle练习题习题答案张表题

Oracle练习题+习题答案(张表+题)create table student( sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5));create table teacher(tno varchar2(10) primary key,tname varchar2(20));create table course(cno varchar2(10),cname varchar2(20),tno varchar2(20),constraint pk_course primary key (cno,tno));create table sc(sno varchar2(10),cno varchar2(10),score number(4,2),constraint pk_sc primary key (sno,cno));/*******初始化学生表的数据******/insert into student values ('s001','张三',23,'男');insert into student values ('s002','李四',23,'男'); create table student(insert into student values ('s003','吴鹏',25,'男'); sno varchar2(10) primary key,insert into student values ('s004','琴沁',20,'女'); sname varchar2(20),insert into student values ('s005','王丽',20,'女'); sage number(2),insert into student values ('s006','李波',21,'男'); ssex varchar2(5)insert into student values ('s007','刘玉',21,'男'); );insert into student values ('s008','萧蓉',21,'女');insert into student values ('s009','陈萧晓',23,'女');insert into student values ('s010','陈美',22,'女');commit;/******************初始化教师表***********************/ insert into teacher values ('t001', '刘阳');create table teacher(insert into teacher values ('t002', '谌燕');tno varchar2(10) primary key,insert into teacher values ('t003', '胡明星');tname varchar2(20)commit; );/***************初始化课程表****************************/ insert into course values ('c001','J2SE','t002');insert into course values ('c002','Java Web','t002');insert into course values ('c003','SSH','t001'); create table course(insert into course values ('c004','Oracle','t001'); cnovarchar2(10),insert into course values ('c005','SQL SERVER 2005','t003'); cname varchar2(20),insert into course values ('c006','C#','t003'); tno varchar2(20),insert into course values ('c007','JavaScript','t002');constraint pk_course primary key (cno,tno)insert into course values ('c008','DIV+CSS','t001'); );insert into course values ('c009','PHP','t003');insert into course values ('c010','EJB3.0','t002');commit;/***************初始化成绩表***********************/insert into sc values ('s001','c001',78.9);insert into sc values ('s002','c001',80.9);create table sc(insert into sc values ('s003','c001',81.9);sno varchar2(10),insert into sc values ('s004','c001',60.9);cno varchar2(10),insert into sc values ('s001','c002',82.9);score number(4,2),insert into sc values ('s002','c002',72.9);constraint pk_sc primary key (sno,cno)insert into sc values ('s003','c002',81.9); ); insert into sc values ('s001','c003','59'); commit;练习:注意:以下练习中的数据是根据初始化到数据库中的数据来写的SQL 语句,请大家务必注意。
oracle练习题及答案csdn

oracle练习题及答案csdn——孙云涛部门:姓名:成绩:一.问答题:1.Oracle安裝完成后的初始口令?internal/oraclesys/change_on_installsystem/managerscott/tigersysman/oem_temp2.怎么获取有哪些用户在使用数据库select username from v$session;3.数据表中一个表允许的字段最大数是多少?in操作时集合里最多允许有多少个元素?都是10004.如何在字符串里加回车?select ‘Welcome to visit’||chr||’’ from dual ;5.怎样修改oracel数据库的默认日期?alter session set nls_date_format=‘yyyymmddhh24miss’;6.请问如何修改一张表的主键?alter table aaadrop constraint aaa_key ;alter table aaaadd constraint aaa_key primary key ;7.如何解决死锁问题:第一步:select ername,t2.sid,t2.serial#,t2.logon_time,t3.sql_ textfrom v$locked_object t1,v$session t2,v$sqltext t3where t1.session_id=t2.sidand t2.sql_address=t3.addressorder by t2.logon_time第二步:alter system kill session ‘sid,serial#’;8.oarcle 数据库的连接字符是什么?||9.查询结果集做和和做差的函数分别是什么?Union 和 minus10.返回参数为星期几的sql语句写法:SELECT TO_CHAR FROM DUAL;11.如何删除一个表的重复纪录DELETE FROM TABLE_NAMEWHERE ROWID!= FROM TABLE_NAME DWHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);12.列出你所了解oracle的字符函数,个数不限lowerupperinitcap concatsubstr instrlpad rpadtrimlength13.列出你所了解oracle的日期函数,个数不限add_months months_betweenround truncnext_day last_day14.列出你所了解oracle的数值函数,个数不限round trunc mod15.列出你所了解oracle的组函数,个数不限avgmin maxsumcount16.怎样得到一个字符串中字母a的个数?写出一个方法即可:Select length-length from dual17.唯一索引和主键的区别是什么?主键不可以为null,唯一索引可以。
Oracle基础练习题及答案(多表查询1)(共5篇)

Oracle基础练习题及答案(多表查询1)(共5篇)第一篇:Oracle基础练习题及答案(多表查询1)利用scott用户自带的四张表完成如下作业:1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname having count(*)>=1;2.列出薪金比SMITH高的所有员工select * from emp where sal>(select sal from emp where ename='SMITH');3.列出所有员工的姓名及其直接上级领导的姓名select a.ename,b.ename “leader” from emp a,emp b wherea.mgr=b.empno;4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select a.empno,a.ename,a.hiredate,c.dname from emp a,emp b,dept c where a.mgr=b.empno and a.deptno=c.deptno anda.hiredate5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select b.dname,a.* from emp a,dept b wherea.deptno(+)=b.deptno;6.列出所有CLERK(办事员)的姓名,及其部门名称,部门人数select aa.ename,aa.job,bb.dname,(select count(a.deptno)from emp a,dept b where a.deptno=b.deptno and b.dname=bb.dname group by a.deptno)from emp aa,dept bb where aa.deptno(+)=bb.deptno and aa.job='CLERK';7.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数select a.job,min(sal),count(ename)from emp a,dept b wherea.deptno=b.deptno having min(sal)>1500 group by a.job;8.列出在部门SALES(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
Oracle的sql语句练习题含答案(二).

1、列出至少有一个雇员的所有部门select distinct dname from dept where deptno in (select distinct deptno from emp;2、列出薪金比"SMITH"多的所有雇员select ename,sal from emp where sal>(select sal from emp where ename=upper('smith';3、列出所有雇员的姓名及其直接上级的姓名select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+;4、列出入职日期早于其直接上级的所有雇员select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr;5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门select dname,ename from dept d left join emp e on d.deptno=e.deptno;6、列出所有“CLERK”(办事员)的姓名及其部门名称select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper('clerk';7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录select job,min(sal from emp group by job having min(sal>1500;8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号select ename from emp where deptno = (select deptno from dept where dname=uppder('SALES'9、列出薪金高于公司平均水平的所有雇员select ename from emp where sal>(select avg(sal from emp; 10、列出与“SCOTT”从事相同工作的所有雇员select ename from emp where job=(select job from emp where ename=upper('scott'; 11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金select ename,sal from emp where sal in (select sal from emp where deptno=30; 12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金select ename ,sal from emp where sal>(select max(sal from emp where deptno=30; 13、列出每个部门的信息以及该部门中雇员的数量select d.deptno,dname,count(ename from dept d left join emp e on (d.deptno=e.deptno group by d.deptno,dname 14、列出所有雇员的雇员名称、部门名称和薪金Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno 15、列出从事同一种工作但属于不同部门的雇员的不同组合Selecttba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptno From emp tba,emp tbb Where tba.job=tbb.job and tba.deptno<>tbb.deptno 16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Selectdept.deptno,dname,loc,count(empno From dept,emp Wheredept.deptno=emp.deptno(+ Group by dept.deptno,dname,loc 17、列出各种类别工作的最低工资Select min(sal from emp group by job 18、列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal from emp where job=upper(‘manager’ group by deptno 19、列出按年薪排序的所有雇员的年薪select (sal+nvl(comm,0*12 as avn from emp order by avn 20、列出薪金水平处于第四位的雇员Select * from (Select ename,sal, rank( over (order by sal desc as grade from emp where grade=4。
Oracle的sql语句练习题含答案

Oracle的sql语句练习题含答案Oracle的sql语句练习题含答案(二)Oracle_SQL练习题11.选择部门30中的所有员工.Select ename from emp where emp.deptno=?30?;2.列出所有办事员(CLERK)的姓名,编号和部门编号Select ename,empno,deptno from emp where job=?CLERK?.3.找出佣金高于薪金的员工.Select ename from emp where comm>sal4.找出佣金高于薪金的60%的员工.Select ename from emp where comm>sal*0.65.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.Select * from emp where (job=?MANAGER? and deptno=10) or (job=?CLERK? and deptno=20)6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料. Select * from emp where job=?MANAGER?and deptno=10 or (job=?CLERK?) or(job not in (…MANAGER?,?CLERK?) and sal >=2000)7.找出收取佣金的员工的不同工作.Select distinct job from emp where NVL (comm,0)>08.找出不收取佣金或收取的佣金低于100的员工.Select ename from emp where NVL(comm,0)<1009.找出各月倒数第3天受雇的所有员工.Select ename from emp where last_day(hiredate)-2=hiredate10.找出早于12年前受雇的员工.Select ename from emp where months_between(sysdate,hiredate)/12 >1211.以首字母大写的方式显示所有员工的姓名.select initcap(ename) name ,job, hiredatefrom emp;12.显示正好为5个字符的员工的姓名Select ename from emp where ename like …_____?select ename,job,hiredate from emp where length(ename)=5;13.显示不带有"R"的员工的姓名.Select ename from emp where ename not lik e …%R%?14.显示所有员工姓名的前三个字符.15.显示所有员工的姓名,用a替换所有"A"16.显示满10年服务年限的员工的姓名和受雇日期.Select ename,hiredate from emp where months_between(systemdate,hiredate)/12 >=1017.显示员工的详细资料,按姓名排序.Select * from emp order by ename18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.Select ename,hiredate from emp order by months_between(sysdate,hiredate) descselect ename, hiredate from emp order by hiredate desc;19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.Select ename,job,sal from emp order by job desc,sal asc20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.Select ename,to_char(hiredate,?yyyy?) as year,to_char(hiredate,?mm?) as month from emp order by year,month asc21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.Select ename,trunk(sal/30) as dailysal from emp22.找出在(任何年份的)2月受聘的所有员工。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle练习题及答案
Oracle练习题及答案
Oracle数据库是全球最受欢迎的关系型数据库管理系统之一,广泛应用于企业级应用程序开发和数据管理。
为了提高对Oracle数据库的理解和应用能力,下面将提供一些常见的Oracle练习题及其答案。
1. 查询表中的所有数据
答案:使用SELECT语句可以查询表中的所有数据,例如:
SELECT * FROM 表名;
2. 查询表中的特定列数据
答案:使用SELECT语句并指定需要查询的列名,例如:
SELECT 列名1, 列名2 FROM 表名;
3. 查询表中满足特定条件的数据
答案:使用SELECT语句并使用WHERE子句来指定条件,例如:
SELECT * FROM 表名 WHERE 列名 = 值;
4. 对查询结果进行排序
答案:使用SELECT语句并使用ORDER BY子句来指定排序的列和排序方式,例如:
SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;
5. 对查询结果进行分组
答案:使用SELECT语句并使用GROUP BY子句来指定分组的列,例如:SELECT 列名1, 列名2 FROM 表名 GROUP BY 列名1;
6. 查询表中的唯一数据
答案:使用SELECT DISTINCT语句可以查询表中的唯一数据,例如:SELECT DISTINCT 列名 FROM 表名;
7. 查询表中的前N条数据
答案:使用SELECT语句并使用ROWNUM关键字来限制查询结果的行数,例如:
SELECT * FROM 表名 WHERE ROWNUM <= N;
8. 使用聚合函数进行数据统计
答案:使用聚合函数如SUM、AVG、COUNT等可以对数据进行统计,例如:SELECT COUNT(*) FROM 表名;
9. 进行多表查询
答案:使用SELECT语句并使用JOIN关键字来连接多个表,例如:SELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名 = 表名2.列名;
10. 更新表中的数据
答案:使用UPDATE语句可以更新表中的数据,例如:
UPDATE 表名 SET 列名 = 值 WHERE 条件;
11. 删除表中的数据
答案:使用DELETE语句可以删除表中的数据,例如:
DELETE FROM 表名 WHERE 条件;
12. 创建新表
答案:使用CREATE TABLE语句可以创建新表,例如:
CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);
13. 修改表结构
答案:使用ALTER TABLE语句可以修改表的结构,例如:
ALTER TABLE 表名 ADD 列名数据类型;
14. 删除表
答案:使用DROP TABLE语句可以删除表,例如:
DROP TABLE 表名;
以上是一些常见的Oracle练习题及其答案,希望能够帮助读者更好地理解和应用Oracle数据库。
通过不断练习和实践,可以进一步提高对Oracle的熟练度和应用能力。
在实际工作中,掌握Oracle数据库的基本操作和常用语句是非常重要的,能够提高工作效率并解决实际问题。