当前位置:文档之家› Oracle查询练习及答案

Oracle查询练习及答案

Oracle查询练习及答案
Oracle查询练习及答案

1 找出佣金高于薪金60%的雇员。

SELECT * FROM emp WHERE comm>sal*0.6;

2 找出部门10中所有经理和部门20中所有办事员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';

3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000);

4 找出收取佣金的雇员的不同工作。

SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;

5 找出不收取佣金或收取的佣金低于300的雇员。

SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;

6 找出各月最后一天受雇的所有雇员。

SELECT * FROM EMP WHERE HIREDA TE=LAST_DAY(HIREDATE);

--找出各月最后受雇的所有雇员

SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate)));

7 找出晚于26年之前受雇的雇员。

SELECT * FROM emp WHERE months_between(SYSDA TE,hiredate)<=26*12;

8 显示只有首字母大写的的所有雇员的姓名。

SELECT * FROM emp WHERE ename=initcap(ename);

9 显示正好为5个字符的雇员的姓名。

SELECT * FROM emp WHERE length(ename)=5;

10显示不带有“R”的雇员姓名。

SELECT * FROM emp WHERE instr(ename,'R')=0;

SELECT * FROM emp WHERE ename NOT LIKE '%R%';

11显示所有雇员的姓名的前三个字符。

SELECT substr(ename,1,3) AS en3 FROM emp;

12显所有雇员的姓名,用a替换所有“A”。

SELECT REPLACE(ename,'A','a') FROM emp;

13显示所有雇员的姓名以及满10年服务年限的日期。

SELECT ENAME,HIREDA TE,ADD_MONTHS(HIREDA TE,120) AS H_10Y FROM EMP;

14显示雇员的详细资料,按姓名排序。

SELECT * FROM EMP ORDER BY ENAME;

15显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。

SELECT ENAME,HIREDA TE FROM EMP ORDER BY HIREDATE;

16显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序顺序排序,而工作按薪金排序。

SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL;

17显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面。

SELECT ENAME,TO_CHAR(HIREDA TE,'YYYY-MM') AS Y_M FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM'),TO_CHAR(HIREDA TE,'YYYY');

18显示在一个月为30天的情况下所有雇员的日薪金,取整。

SELECT ROUND(SAL/30) AS SAL FROM EMP;

19找出在(任何年份的)2月受聘的所有雇员。

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MM')='02';

20对于每个雇员,显示其加入公司的天数。

SELECT CEIL(SYSDA TE-HIREDA TE) AS DY FROM EMP;

21显示姓名字段的任何位置,包含“A”的所有雇员的姓名。

SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';

SELECT ENAME FROM EMP WHERE INSTR(ENAME,'A')>0;

22以年、月和日显示所有雇员的服务年限。

SELECT HIREDATE,FLOOR(MONTHS_BETWEEN(SYSDA TE,HIREDATE)/12) AS Y,MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDA TE)),12) AS M,MOD(FLOOR(SYSDATE-HIREDATE),30) AS D FROM EMP;

23列出至少有一个雇员的所有部门。

SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);

24列出薪金比“SMITH”多的所有雇员。

SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE

ENAME='SMITH');

25列出所有雇员的姓名及其上级的姓名。

SELECT ygb.ename AS empnm,sjb.ename AS mgrnm FROM emp ygb,emp sjb WHERE ygb.mgr=sjb.empno;

26列出入职日期早于其直接上级的所有雇员。

SELECT * FROM emp ygb WHERE hiredate<(SELECT hiredate FROM emp sjb WHERE sjb.empno=ygb.mgr);

27列出部门和这些部门的雇员,同时列出那些没有雇员的部门。

SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)

UNION

SELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)

SELECT dname,ename FROM dept a LEFT JOIN emp b ON a.deptno=b.deptno;

28列出所有“CLERK”(办事员)的姓名及其部门名称。

SELECT ename,dname FROM dept a,emp b WHERE a.deptno=b.deptno AND job='CLERK';

29列出各种类型的最低薪金,并使最低薪金大于1500。

SELECT job,MIN(sal) FROM emp GROUP BY job HA VING MIN(sal)>1500;

30列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES');

31列出薪金高于公司平均水平的所有雇员。

SELECT * FROM EMP WHERE SAL>(SELECT A VG(SAL) FROM EMP);

32列出与“SCOTT”从事相同工作的所有雇员。

SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SCOTT') AND ENAME<>'SCOTT';

33列出薪金等于在部门30工作的所有雇员的姓名和薪金。

SELECT * FROM EMP WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=30);

34列出薪金高于在部门30工作的所有雇员的姓名和薪金。

SELECT * FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);

35列出在每个部门工作的雇员的经理以及其他信息。

SELECT A.*,B.* FROM DEPT A,EMP B WHERE A.DEPTNO=B.DEPTNO AND JOB='MANAGER';

SELECT A.*,B.* FROM (SELECT * FROM EMP WHERE JOB<>'MANAGER') A,(SELECT * FROM EMP WHERE JOB='MANAGER') B WHERE A.DEPTNO=B.DEPTNO AND B.JOB='MANAGER'

ORDER BY A.DEPTNO;

36列出所有雇员的雇员名称、部门名称和薪金。

SELECT ENAME,DNAME,SAL FROM DEPT A,EMP B WHERE A.DEPTNO=B.DEPTNO;

37列出从事同一种工作但属于不同部门的雇员的不同组合。

SELECT * FROM emp ORDER BY job,deptno;

38列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员。

SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)

UNION

SELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)

39列出各种类型工作的最低工资。

SELECT job,MIN(sal) FROM emp GROUP BY job;

40列出各个部门的MANAGER(经理)的最低薪金。

SELECT MIN(sal) FROM emp WHERE job='MANAGER';

41列出按年薪排序的所有雇员的年薪。

SELECT sal*12 AS y_sal FROM emp ORDER BY sal*12;

42列出薪金水平处于第四位的雇员。

SELECT * FROM

(SELECT a.*,row_number() over(ORDER BY sal DESC) AS rn FROM emp a)WHERE rn=4;

43查找EMP表中前5条记录

SELECT * FROM emp WHERE ROWNUM<=5;

44查找EMP表中10条以后的记录

SELECT * FROM (SELECT a.*,ROWNUM AS rn FROM emp a) WHERE rn>10;

45查找EMP表中薪水第5高的员工

SELECT * FROM (SELECT a.*,row_number() over(ORDER BY sal DESC) AS rn FROM emp a) WHERE rn=5;

46查找EMP表部门30中薪水第3的员工

SELECT * FROM (SELECT a.*,row_number() over(PARTITION BY deptno ORDER BY sal DESC) AS rn FROM emp a) WHERE rn=5 AND deptno=30;

47查找EMP表中每部门薪水第3的员工

SELECT * FROM (SELECT a.*,row_number() over(PARTITION BY deptno ORDER BY sal DESC) AS rn FROM emp a) WHERE rn=3;

48统计各部门的薪水总和.

SELECT deptno,SUM(sal) AS sumsal FROM emp GROUP BY deptno;

--每个部门员工和经理的详细信息:编号,姓名,薪水,入职日期,部门编号

SELECT a.empno AS eno,a.ename AS enm,a.job AS ejob,a.sal AS esal,a.hiredate AS edate,a.deptno AS edept,b.empno AS mno,b.ename AS mnm,b.job AS mjob,b.sal AS msal,b.hiredate AS mdate,b.deptno AS mdept FROM (SELECT * FROM emp WHERE job<>'MANAGER' AND job<>'PRESIDENT') a,(SELECT * FROM emp WHERE job='MANAGER') b WHERE a.deptno=b.deptno;

--1.列出至少有一个员工的所有部门。

select * from dept where deptno in(select distinct deptno from emp);

select count(*),deptno from emp group by deptno having count(*)>1;

--2.列出薪金比“SMITH”多的所有员工。

select * from emp where sal>(select sal from emp where ename='SMITH');

--3.列出所有员工的姓名及其直接上级的姓名

select ename,(select ename from emp where empno=a.mgr) from emp a;

select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+);

--4.列出受雇日期早于其直接上级的所有员工。select ename from emp e where hiredate < (select hiredate from emp where empno=e.mgr);

--5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

select dname,ename from dept left join emp on dept.deptno=emp.deptno;

select dname,ename from dept a,emp b where a.deptno = b.deptno(+);

--6.列出所有“CLERK”(办事员)的姓名及其部门名称。

select dname,ename from dept a,emp b where a.deptno=b.deptno and job='CLERK';

select (select dname from dept where deptno=a.deptno) as dname ,ename from emp a where job='CLERK';

--7.列出最低薪金大于1500的各种工作。

select job from emp group by job having min(sal)>1500;

select job,min(sal) msal from emp group by job having min(sal)>1500;

--8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。select ename from emp where deptno=(select deptno from dept where dname='SALES');

--9.列出薪金高于公司平均薪金的所有员工。

select ename from emp where sal>(select avg(sal) from emp);

--10.列出与“SCOTT”从事相同工作的所有员工。

select * from emp where job=(select job from emp where ename='SCOTT');

--11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

select ename,sal from emp where sal=any(select sal from emp where deptno=30);

select * from emp where sal in (select sal from emp where deptno=30);

--12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

select ename,sal from emp where sal>all(select sal from emp where deptno=30);

--13.列出在每个部门工作的员工数量、平均工资和平均服务期限。

select deptno,count(*),

trunc(avg(sal+nvl(comm,0))) avgsal,

trunc(avg(sysdate-hiredate)) avgday

from emp group by deptno;

--14.列出所有员工的姓名、部门名称和工资。

select ename,dname,(nvl(comm,0)+sal) as 工资from emp,dept where emp.deptno=dept.deptno; --15.列出从事同一种工作但属于不同部门的员工的一种组合。

select distinct a.ename,a.job,a.deptno from emp a,emp b

where (a.job=b.job)and(a.deptno!=b.deptno) order by a.job;

--16.列出所有部门的详细信息和部门人数。

select a.*,(select count(*) from emp where deptno=a.deptno) as 人数from dept a;

--17.列出各种工作的最低工资。

select job, min(sal+nvl(comm,0)) from emp group by job;

--18.列出各个部门的MANAGER(经理)的最低薪金。

select deptno,min(sal) from emp where job='MANAGER' group by deptno;

--19.列出所有员工的年工资,按年薪从低到高排序。

select empno,ename,(sal+nvl(comm,0))*12 as 年薪from emp order by 年薪;

ORACLE数据库期末考试题目及答案

期末考试卷(卷) 课程名称:数据库考试方式:开卷()闭卷(√) 、本试卷共4 页,请查看试卷中是否有缺页。 2、考试结束后,考生不得将试卷、答题纸带出考场。 1、以下(a )内存区不属于SGA。 A.PGA B.日志缓冲区 C.数据缓冲区 D.共享池 2、d )模式存储数据库中数据字典的表和视图。 (A.DBA B.SCOTT C.SYSTEM D.SYS 3、Oracle 中创建用户时,在若未提及DEFAULT TABLESPACE 关键字,Oracle 就将 c )则(表空间分配给用户作为默认表空间。A.HR B.SCOTT C.SYSTEM D.SYS

4、a )服务监听并按受来自客户端应用程序的连接请求。(A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer 5、b )函数通常用来计算累计排名、移动平均数和报表聚合等。(A.汇总B.分析C.分组D.单行 6、b)SQL 语句将为计算列SAL*12 生成别名Annual Salary (A.SELECT ename,sal*12 …Annual Salary? FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; 7、锁用于提供(b )。 A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 8、( c )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除行。 A.行共享B.行排他C.共享D.排他 9、带有( b )子句的SELECT 语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH

oracle练习题及答案

WORD格式 1.找出各月倒数第3天受雇的所有员工 selectenamefromempwherelast_day(hiredate)-2=hiredate; 2.找出早于12年前受雇的员工 selectenamefromempwheremonths_between(sysdate,hiredate)>=144; 3.以首字母大写的方式显示所有员工的姓名 selectinitcap(ename)fromemp; 4.显示正好为5个字符的员工的姓名 selectenamefromempwherelength(ename)=5; 5.显示不带有“R”的员工姓名 selectenamefromempwhereinstr(ename,'R',1,1)=0; 6.显示所有员工姓名的前三个字符 selectsubstr(ename,1,3)fromemp; 7.显示所有员工的姓名,用“a”替换所有的“A” selectename,replace(ename,'A','a')fromemp; 8.显示满10年服务年限的员工的姓名和受雇日期 selectename,hiredatefromempwheremonths_between(sysdate,hiredate)>=120; 9.显示员工的详细资料,按姓名排序 select*fromemporderbyenamedesc; 10.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面selectename,hiredatefromemporderbyhiredate; 11.显示所有员工的姓名、工作和薪金,按照工作的降序排序,若工作相同则按薪金排序selectename,job,salfromemporderbyjobdesc,sal; 12.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份 相同则将最早年份的员工排在最前面 selectename,to_char(hiredate,'yyyy')h,to_char(hiredate,'mm')m fromemporderbym,h; 13.显示在一个月为30天的情况所有员工的日薪金,忽略余数 selecttrunc(sal/30)fromemp; 14.找出在(任何年份的)2月受聘的所有员工 selectenamefromempwhereto_char(hiredate,'mm')=2; 15.对于每个员工显示其加入公司的天数 selectename,sysdate-hiredatefromemp; 16.显示姓名字段的任何位置包含“A”的所有员工姓名 selectenamefromempwhereinstr(ename,'A',1,1)<>0; selectenamefromempwhereenamelike'%A%'; 专业资料整理

oracle练习题目

1.习题:列出至少有一个员工的所有部门 select distinct d.deptno,d.dname from emp e join dept d on e.deptno=d.deptno; select distinct deptno from emp having count(empno)>=1 group by deptno; 2.习题:列出工资比“Smith”多的所有雇员。 select ename,sal from emp where sal>(select sal from emp where ename='SMITH'); 3.习题:列出所有员工的姓名和其直接上司的姓名① select e.ename,m.ename from emp e left join emp m on e.mgr=m.empno;②select emp.ename,mg.ename from emp join(select e.ename,e.empno from emp e join(select distinct mgr from emp where mgr is not null) m on empno=m.mgr) mg on emp.mgr=mg.empno; 4.习题:列出雇佣日期早于其直接上级的所有雇员的编号、姓名和部门名称 select empno,ename,dname from(select emp.empno,emp.ename,deptno dno from emp join(select e.ename,e.empno,e.hiredate from emp e join(select distinct mgr from emp where mgr is not null) m on empno=m.mgr) mg on emp.mgr=mg.empno and emp.hiredate

oracle考试试题及答案

试题一 一、填空题(每小题4分,共20分) 1、数据库管理技术经历了人工管理、文件系统、数据库系统三个阶段 2、数据库三级数据结构是外模式、模式、内模式 3、Oracle数据库中,SGA由数据库缓冲区,重做日志缓冲区,共享池组成 4、在Oracle数据库中,完正性约束类型有Primay key约束。Foreign key约束,Unique约束,check约束,not need约束 5、PL/SQL中游标操作包括声明游标,打开游标,提取游标,关闭游标 二、正误判断题(每小题2分,共20分) 1、数据库中存储的基本对象是数据(T) 2、数据库系统的核心是DBMS(T) 3、关系操作的特点是集合操作(T) 4、关系代数中五种基本运算是并、差、选择、投影、连接(F) 5、Oracle进程就是服务器进程(F) 6、oraclet系统中SGA所有用户进程和服务器进程所共享(T) 7、oracle数据库系统中数据块的大小与操作系统有关(T) 8、oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(T) 9、PL/SQL中游标的数据是可以改变的(F) 10、数据库概念模型主要用于数据库概念结构设计() 三、简答题(每小题7分,共35分) 1、何谓数据与程序的逻辑独立性和物理独立性? 2、试述关系代数中等值连接与自然连接的区别与联系? 3、何谓数据库,数据库设计一般分为哪些阶段? 4、简述Oracle逻辑数据库的组成?

5、试任举一例说明游标的使用方法? 五、设有雇员表emp(empno,ename,age,sal,tel,deptno), 其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话 deptno-----部门号。 请按下列要求分别晨SQL*PLUS下编程。(每小题3分,共15分)?1、查询家有电话的职工信息。 ?2、查询工资在500至800元之间的雇员信息 ?3、按年龄递增顺序显示雇员编号、姓名、年龄、工资 ?4、求部门号为D_01的平均工资 ?5、查找部门号为D_01的40岁以上而工资在400元以下的雇员名单。 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; ? 试题一答案 一、填空题 1、人工管理、文件系统、数据库系统 2、外模式、模式、内模式 3、数据库缓冲区,重做日志缓冲区,共享池 4、Primay key约束。Foreign key约束,Unique约束,check约束,not need 约束 5、声明游标,打开游标,提取游标,关闭游标 二、正误判断题 1、T 2、T 3、T 4、F 5、F 6、T 7、T 8、T 9、F 三、(略) 五、 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; 试题二

Oracle试题(含答案)

_C++_CSD/ESD1405 1. 把工资大于1000的first_name,salary 显示出来,按工资排序,工资相同按first_name降序的SQL语句是? A. select first_name,salary from s_emp order by salary,first_name B. select first_name,salary from s_emp order by salary,first_name asc C. select first_name,salary from s_emp order by salary desc,first_name D. select first_name,salary from s_emp order by salary,first_name desc 正确答案:D 2. 已知数据库中有员工表s_emp和部门表s_dept,具体字段如下: 员工表字段介绍: ID 员工编号 LAST_NAME 员工姓 FIRST_NAME 员工名 USERID 用户编号 START_DATE 入职日期 COMMENTS 员工备注信息 MANAGER_ID 员工的领导ID TITLE 员工的职位 DEPT_ID 部门的编号 SALARY 员工的月薪 COMMISSION_PCT 提成 部门表的字段介绍: ID 部门编号 NAME 部门名 REGION_ID 地区编号 注:以下所有数据库相关题目,均使用这两个表 把s_emp表中的每个人的全名和工资列出来的SQL语句是? A. select first_name|last_name ,salary from s_emp

Oracle数据库试题及答案

Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。(A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。 ?(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C ) (A)select*from scott.wz where wunit is null and rownum<5; (B)select*from myuser.wz where wunit = null and rownum<5; (C) select*from myuser.wz where wunit is null and rownum<6; (D)select*form scott.wz where wunit is null and rownum<6; ?4、若当前日期为’25-5月-06’,以下( D? )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5)) 5、下列叙述中正确的是_C_。 A、数据库是一个独立的系统,不需要操作系统的支持 B、数据库设计是指设计数据库管理系统 C、数据库技术的根本目标是要解决数据共享的问题 D、数据库系统中,数据的物理结构必须与逻辑结构一致 6、SQL语句中修改表结构的命令是 ???C?? ?。 A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE 7、数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是__ A___。 A、DBS包括DB和DBMS B、DBMS包括DB和DBS C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS 8、要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表_A___。 A、是同一个数据库中的两个表 B、不同数据库中的两个表 C、两个自由表 D、一个是数据库表另一个是自由表 9、在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过__B_ __。 A、候选键 B、主键 C、外键 D、超键 10、索引字段值不唯一,应该选择的索引类型为___ B__。 A、主索引 B、普通索引 C、候选索引 D、唯一索引 11、从数据库中删除表的命令是___C __。 A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE 12、 DELETE FROM S WHERE 年龄>60语句的功能是___B___。 A、从S表中彻底删除年龄大于60岁的记录 B、S表中年龄大于60岁的记录被加上删除标记

Oracle数据库试题及答案word版本

O r a c l e数据库试题及 答案

Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。 (A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C ) (A)select*from scott.wz where wunit is null and rownum<5; (B)select*from myuser.wz where wunit = null and rownum<5; (C) select*from myuser.wz where wunit is null and rownum<6; (D)select*form scott.wz where wunit is null and rownum<6; 4、若当前日期为’25-5月-06’,以下( D )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5))

Oracle基础练习题及答案(子查询)

子查询 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate select ename,hiredate from emp where deptno=(select b.deptno from emp a,dept b where a.deptno=b.deptno and ename='SCOTT'); 2.查询工资比公司平均工资高的所有员工的员工号empno,姓名 ename和工资sal。 select empno,ename,sal from emp where sal>(select avg(sal) from emp ); 3.查询和姓名中包含字母u的员工在相同部门的员工的员工号 empno和姓名ename select empno,ename from emp a,dept b where a.deptno(+)=b.deptno and a.deptno=(select deptno from emp where ename like'%U%'); 4.查询在部门的loc为newYork的部门工作的员工的员工姓名 ename,部门名称dname和岗位名称job select ename,dname,job from emp a,dept b where a.deptno=b.deptno and loc='NEW YORK'; 5.查询管理者是king的员工姓名ename和工资sal select a.ename,a.sal from emp a,emp b where a.mgr=b.empno and b.ename='KING';

Oracle基础练习题及答案(多表查询1)

利用scott用户自带的四张表完成如下作业: 1.列出至少有一个员工的所有部门 selectb.deptno,b.dnamefromemp a,dept bwherea.deptno=b.deptnogroupbyb.deptno,b.dnamehavingcount(*)>=1; 2.列出薪金比SMITH高的所有员工 select*fromempwheresal>(selectsalfromempwhereename='SMITH'); 3.列出所有员工的姓名及其直接上级领导的姓名 selecta.ename,b.ename "leader"fromemp a,emp bwherea.mgr=b.empno; 4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称 selecta.empno,a.ename,a.hiredate,c.dnamefromempa,empb,deptcwherea.mgr= b.empnoanda.deptno=c.deptnoanda.hiredate

Oracle数据库查询练习及答案

1 找出佣金高于薪金60%的雇员。 SELECT * FROM emp WHERE comm>sal*; 2 找出部门10中所有经理和部门20中所有办事员的详细资料。 SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK'; 3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。 SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000; SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000); 4 找出收取佣金的雇员的不同工作。 SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL; 5 找出不收取佣金或收取的佣金低于300的雇员。 SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300; 6 找出各月最后一天受雇的所有雇员。 SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE); --找出各月最后受雇的所有雇员 SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate))); 7 找出晚于26年之前受雇的雇员。 SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12; 8 显示只有首字母大写的的所有雇员的姓名。 SELECT * FROM emp WHERE ename=initcap(ename); 9 显示正好为5个字符的雇员的姓名。 SELECT * FROM emp WHERE length(ename)=5; 10显示不带有“R”的雇员姓名。 SELECT * FROM emp WHERE instr(ename,'R')=0; SELECT * FROM emp WHERE ename NOT LIKE '%R%'; 11显示所有雇员的姓名的前三个字符。 SELECT substr(ename,1,3) AS en3 FROM emp; 12显所有雇员的姓名,用a替换所有“A”。

Oracle笔试题及答案

一、选择题(每题1分) 1.Oracle发出下列select语句: SQL> select e.empno, e.ename, d.loc 2 from emp e, dept d 3 where e.deptno = d.deptno 4 and substr(e.ename, 1, 1) = ‘S’; 下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句? A.select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’; B.select empno, ename, loc from emp, dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’; C.select empno, ename, loc from emp join dept where emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’; D.select empno, ename, loc from emp left join dept on emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’; 2.你要对操纵Oracle数据库中的数据。下列哪个选项表示Oracle中select语句的功能, 并且不需要使用子查询? A.可以用select语句改变Oracle中的数据 B.可以用select语句删除Oracle 中的数据 C.可以用select语句和另一个表的内容生成一个表 D.可以用select语句对表截断 3.Oracle数据库中发出一个查询。下列哪个选项不能查询对用户定义静态表达式执行数学 运算时的查询组件? A.列子句 B.表子句 C.DUAL表 D.where子句 4.你要操纵Oracle数据,下列哪个不是SQL命令? A.select * from dual; B.set define C.update emp set ename = 6543 where ename = ‘SMITHERS’; D.create table employees(empid varchar2(10) primary key); 5.你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用?A.表 B.序列 C.索引 D.视图 6.你要根据PRODUCT_NAME列从PROFITS表查询中过滤返回的数据。下列哪个子句包含相 应过滤条件的引用? A.select B.from C.where D.having 7.下列代码显示了PROFITS表输出的局部: PRODUCT_NAME PRODUCT_TYPE QTR_END_DATE PROFIT ------------ ------------ ------------ ------------- BARNEY DOLL TOY 31-MAR-2001 6575430.30 GAS GRILL APP 31-MAR-2001 1234023.88

Oracle面试题及答案整理

Oracle面试题及答案整理

Oracle面试题及答案整理 1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。 select fclass,max(fscore) from table1 group by fclass,fid 2、有一个表table1有两个字段FID,Fno,字都非空,写一个SQL语句列出该表中一个FID对应多个不同的Fno的纪录。 类如: 101a1001 101a1001 102a1002 102a1003 103a1004 104a1005 104a1006 105a1007 105a1007 105a1007 结果: 102a1002

102a1003 104a1005 104a1006 select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno; 3、有员工表empinfo ( Fempno varchar2(10) not null pk, Fempname varchar2(20) not null, Fage number not null, Fsalary number not null ); 假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人: fsalary>9999 and fage > 35 fsalary>9999 and fage < 35 fsalary <9999 and fage > 35 fsalary <9999 and fage < 35 每种员工的数量; select sum(case when fsalary > 9999 and fage > 35 then 1 else 0end) as "fsalary>9999_fage>35",

oracle习题及答案

1.查询工资大于12000的员工姓名和工资 Select last_name||' '||first_name,salary from employees where salary >12000; 2.查询员工号为176的员工的姓名和部门号 Select last_name||' '||first_name,department_id from employees where employee_id=176; 3.选择工资不在5000到12000的员工的姓名和工资 Select last_name||' '||first_name,salary from employees where salary not between 5000 and 12000; 4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id 和雇用时间 Select last_name||' '||first_name,job_id,hire_date from employees where hire_date between '1-2月-98' and '1-5月-98'; 5.选择在20或50号部门工作的员工姓名和部门号 Select last_name||' '||first_name,department_id from employees where department_id in (20,50); 6.选择在1994年雇用的员工的姓名和雇用时间 Select last_name||' '||first_name,hire_date from employees where hire_date like '%94'; 7.选择公司中没有管理者的员工姓名及job_id Select last_name||' '||first_name,job_id from employees where Manger_id is null;

oracle模拟试题答案汇总

备注:题号相同的题目或者增加的一些题目是11级网络的模拟试题 第 1 题,选择题(2分): ORACLE中,游标可以分为三类,下面不是Oracle游标的是( 1 )。 (1) 系统游标 (2) 显式游标 (3)隐式游标 (4) REF游标 第 2 题,选择题(2分):PL/SQL块中定义了一个带参数的游标:CURSOR emp_cursor(dnum NUMBER) IS SELECT sal,comm FROM emp WHERE deptno=dnum; 那么正确打开此游标的语句是(1) (1) OPEN emp_cursor(20); (2) OPEN emp_cursor FOR 20; (3) OPEN emp_cursor USING 20; (4) FOR rmp_rec IN emp_cursor[20] LOOP ... END LOOP; 第 3 题,选择题(2分): 有关ORACLE索引说法正确的是(A ) (1) 索引的数据和表的数据分开存储,但索引组织表除外 (2) 所有索引中的数据是顺序排序 (3) 分区表的索引必须统一存储 (4) 只能对分区表的索引进行分区 第 4 题,选择题(2分): 下列有关包的使用说法错误的是( A) (1) 必须先创建包头,然后创建包体 (2) 在不同的包内模块可以重名 (3) 包的私有过程不能被外部程序调用 (4) 包体中的全局过程和函数必须在包 第 5 题,选择题(2分): 以下定义的哪个变量是非法的?( A) (1) var_ab number default:=1; var_ab number default 1; (2) var_ab number not null :='0'; (3) var_ab number; (4) var_ab number:=3; 第 6 题,选择题(2分): PL/SQL块中不能直接使用的SQL命令是(A) (1) drop (2) insert (3) update

Oracle经典练习题(很全面)讲解学习

O r a c l e经典练习题 (很全面)

Oracle 经典练习题 一.创建一个简单的PL/SQL程序块 1.编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。 declare v_emp emp%rowtype; begin select * into v_emp from emp where ename='SMITH'; dbms_output.put_line('员工的工作是:'||v_emp.job||' ;他的薪水是: '||v_emp.sal); end; 2.编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置。 方法一:(传统方法) declare pname dept.dname%type; ploc dept.loc%type; pdeptno dept.deptno%type; begin pdeptno:=&请输入部门编号; select dname,loc into pname,ploc from dept where deptno=pdeptno; dbms_output.put_line('部门名称: '||pname||'所在位 置:'||ploc); exception –异常处理 when no_data_found then dbms_output.put_line('你输入的部门编号有误!!'); when others then dbms_output.put_line('其他异常'); end; 方法二:(使用%rowtype)

declare erow dept%rowtype; begin select * into erow from dept where deptno=&请输入部门编号; dbms_output.put_line(erow.dname||'--'||erow.loc); exception when no_data_found then dbms_output.put_line('你输入的部门号有误!!!'); when others then dbms_output.put_line('其他异常'); end; 3.编写一个程序块,利用%type属性,接受一个雇员号,从emp表中显示该雇 员的整体薪水(即,薪水加佣金)。 declare pempno emp.empno%type; totalSal emp.sal%type; begin pempno:=&请输入员工编号; select sal+nvl(comm,0) into totalSal from emp where empno=pempno; dbms_output.put_line('该员工总共薪水'||totalSal); exception when no_data_found then dbms_output.put_line('你输入的员工编号有误!!'); when others then dbms_output.put_line('其他异常'); end; 4.编写一个程序块,利用%rowtype属性,接受一个雇员号,从emp表中显示 该雇员的整体薪水(即,薪水加佣金)。 declare erow emp%rowtype; begin select * into erow from emp where empno=&请输入员工编号;

《Oracle数据库应用》练习题及答案

《Oracle数据库应用》 一、选择题 1.在Windows操作系统中,Oracle的____服务监听并接受来自客户端应用程序的连接请求。 A、OracleHOME_NAMETNSListener B、OracleServiceSID C、OracleHOME_NAMEAgent D、OracleHOME_NAMEHTTPServer 2.ORACLE中,用来判断列值是否为空的操作符是____ A、==NULL B、IS NULL C、 AS NULL D、 NULLIS 3.在CUSTOMER中有一列为单价(PRICE),写一个SELECT命令显示所有单价在500以上的查询语句______。 A、SELECT * FROM CUSTOMER WHERE PRICE MORE THAN 500; B、SELECT * FROM CUSTOMER WHERE PRICE BETWEEN 500 AND *; C、SELECT * FROM CUSTOMER WHERE PRICE LIKE '%500%'; D、SELECT * FROM CUSTOMER WHERE PRICE>=500; 4.在Oracle中,使用HAVING子句也可以进行条件查询,以下选项说法是正确的是______. A、 HAVING子句和WHERE子句相同 B、 HAVING子句用于行的条件查询 C、 HAVING子句用于已分组结果的条件查询 D、以上皆非 5.在安装oracle时,自动开启了的账号是() A、System B、Sa C、Scott D、Administrator 6.下列哪一项是Oracle数据库中最小的存储分配单元() A、表空间 B、段 C、盘区 D、数据块 7.( )是一个很小的二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。创建数据库时,同时就提供了与之对应的控制文件。 A、数据文件 B、控制文件 C、重做日志文件 D、以上都不对 8.若用户要连接数据库,则该用户必须拥有的权限是() A、create table B、create index C、create session D、create user

Oracle练习题附答案

练习1、请查询表DEPT中所有部门的情况。 select * from dept; 练习2、查询表DEPT中的部门号、部门名称两个字段的所有信息。 select deptno,dname from dept; 练习3、请从表EMP中查询10号部门工作的雇员姓名和工资。 select ename,sal from emp where deptno=10; 练习4、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。select ename,sal from emp where job='CLERK' or job='MANAGER'; 练习5、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。select ename,deptno,sal,job from emp where deptno between 10 and 30; 练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。 select ename,sal,job from emp where ename like 'J%'; 练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。 select ename,job,sal from emp where sal<=2000 order by sal desc; 练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。 select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=?CLERK?; 练习9、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。 select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000; select a.ename 员工,b.ename 经理 from emp a left join emp b on a.mgr=b.empno where a.sal>=2000; 练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。 select ename,job,sal f rom emp where sal>(select sal from emp where ename=?JONES?); 练习11、列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。 select ename,job,deptno from emp where deptno not in (select deptno from dept); 练习12、查找工资在1000~3000之间的雇员所在部门的所有人员信息 select * from emp where deptno in (select distinct deptno from emp where sal between 1000 and 3000);

相关主题
文本预览
相关文档 最新文档