Oracle经典练习题(很全面)

合集下载

Oracle 考试试题(带答案)

Oracle 考试试题(带答案)

a) b) c) d) 参考答案
OracleHOME_NAMETNSListener OracleServiceSID OracleHOME_NAMEAgent OracleHOME_NAMEHTTPServer
B
9) 在 Oracle 中创建用户时,若未提及 DEFAULT TABLESPACE 关键字,则 Oracle 就将()表空间分配 给用户作为默认表空间。。
DATEPART EXTRACT TO_CHAR TRUNC
bc
5) 在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME VARCHAR2(25) EMAIL VARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名()。
a) b) c) d) 参考答案
a) b) c) d) 参考答案
OracleHOME_NAMETNSListener OracleServiceSID OracleHOME_NAMEAgent OracleHOME_NAMEHTTPServer
a
8) 在Windows操作系统中,Oracle的()服务是使用 iSQL*Plus必须的。
A
12) 在Oracle中,下面用于限制分组函数的返回值的子句是 ()。
a) WHERE b) HAVING c) ORDER BY d) 无法限定分组函数的返回值
参考答案 b
13) 在Oracle中,有一个名为seq的序列对象,以下语句能返 回序列值但不会引起序列值增加的是()。
a) b) c) d) 参考答案
%NOTFOUND %FOUND %ROWTYPE %ISOPEN %ROWCOUNT
c
15) 在Oracle中,当控制一个显式游标时,下面哪种命令包 含INTO子句()。

Oracle经典练习题及标准答案

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练习题及答案

oracle练习题及答案Oracle练习题及答案Oracle是一种强大的关系数据库管理系统,被广泛应用于企业级应用程序和数据管理中。

为了帮助大家更好地掌握Oracle数据库的知识,以下是一些Oracle练习题及答案,希望能够帮助大家更好地理解和掌握Oracle数据库的知识。

1. 什么是Oracle数据库?Oracle数据库是一种关系数据库管理系统,由美国Oracle公司开发。

它是一种高性能、可靠性高的数据库系统,被广泛应用于企业级应用程序和数据管理中。

2. Oracle数据库的特点有哪些?Oracle数据库具有以下特点:高性能、高可用性、可伸缩性、安全性高、灵活性强、易管理等。

3. 如何创建一个新的数据库用户?在Oracle数据库中,可以使用以下SQL语句来创建一个新的数据库用户:```CREATE USER username IDENTIFIED BY password;```4. 如何查看Oracle数据库中所有的表?可以使用以下SQL语句来查看Oracle数据库中所有的表:```SELECT table_name FROM user_tables;```5. 如何在Oracle数据库中插入一条新的记录?可以使用以下SQL语句来在Oracle数据库中插入一条新的记录:```INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);```6. 如何在Oracle数据库中更新一条记录?可以使用以下SQL语句来在Oracle数据库中更新一条记录:```UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;```7. 如何在Oracle数据库中删除一条记录?可以使用以下SQL语句来在Oracle数据库中删除一条记录:```DELETE FROM table_name WHERE condition;```通过以上Oracle练习题及答案的学习,相信大家对Oracle数据库有了更深入的了解。

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

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试题

oracle试题

oracle试题一、选择题1. 在Oracle数据库中,用于创建表的语句是什么?A. CREATE DATABASEB. CREATE TABLEC. CREATE INDEXD. CREATE VIEW答案:B2. 下列哪个命令可以用于查询当前数据库中的所有表?A. DESCB. SHOW TABLESC. LIST TABLESD. SELECT * FROM ALL_TABLES答案:C3. 在Oracle中,如何删除一个表?A. REMOVE TABLE table_name;B. DELETE TABLE table_name;C. DROP TABLE table_name;D. ERASE TABLE table_name;答案:C4. 在Oracle SQL中,哪个关键字用于选择所有列?A. ALLB. EACHC. EVERYD. ALL COLUMNS答案:A5. 如何在Oracle SQL查询中对结果进行排序?A. ORDER BY column_name ASC/DESC;B. SORT BY column_name ASC/DESC;C. ARRANGE BY column_name ASC/DESC;D. CLASSIFY BY column_name ASC/DESC;答案:A二、填空题1. 在Oracle数据库中,用来创建视图的关键字是_______。

答案:CREATE VIEW2. 若要在Oracle中为表添加一个新的列,应使用_______语句。

答案:ALTER TABLE3. 在Oracle SQL中,用于合并两个或多个查询结果的关键字是_______。

答案:UNION4. 若要在Oracle数据库中重命名表,应使用_______语句。

答案:RENAME5. 在Oracle中,用来删除表中的行的语句是_______。

答案:DELETE三、简答题1. 请简述Oracle数据库中的事务是什么?答:事务是一组SQL语句的集合,它们作为一个单一的工作单元执行。

Oracle基础(习题卷3)

Oracle基础(习题卷3)

Oracle基础(习题卷3)第1部分:单项选择题,共63题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]如果想要配置Oracle 以使用校验和来验证数据块,将初始化参数()设置为TRUE 。

A)DB_BLOCK 。

B)DB_EXTENT_CHECKSUM 。

C)DB_BLOCK_CHECKSUM 。

D)DB_SEQENT_CHECKSUM 。

答案:C解析:2.[单选题]()是ORACLE 最基本的逻辑存储单位。

A)盘区。

B)段。

C)表空间。

D)数据块。

答案:D解析:3.[单选题]请看一个 SQL 语句:ALTER USER jinlian DEFAULT ROLL ALL;以上这个 DDL 语句将完成下面的哪一项工作?( )A)赋予 jianlian 用户 ALL 这个角色B)将所有的角色都设置成 jinlian 用户的默认角色C)移除 jinlian 用户的所有默认角色D)没有完成任何工作,因为这个命令将不会执行答案:B解析:4.[单选题]()是在分区中使用范围分区分区数据,而在子分区中使用散列分区方法,它适合于历史数据和条块数据,改善范围分区及其数据放置的管理性,提供了散列分区的并行机制优点A)列表分区。

B)组合分区。

C)交叉分区。

D)时间分区。

答案:B解析:5.[单选题]INSERT INTO TEST VALUES(‘&ID’, ’&NAME’); 语句在执行时将( )A)编译错:提示变量未定义B)运行错:提示不能识别符号C)将值&ID和&NAME插入到表中D)提示用户输入输入ID和NAME的值,再将输入值插入表中答案:D解析:A)执行游标B)执行SQL语句的UUPDATE语句C)对要更新的列进行加锁D)都不对答案:B解析:7.[单选题]在Oracl中,哪种表分区维护操作可以将非分区表转换为分区表的分区( )。

A)添加分区B)结合分区C)交换表分区D)合并分区答案:C解析:8.[单选题]当用SQL*Plus已经登录到某数据库,此时想登录到另一数据库,应该用命令( )。

oracle练习题(打印版)

oracle练习题(打印版)

oracle练习题(打印版)### Oracle数据库练习题#### 一、选择题1. Oracle数据库中,哪个命令用于创建表?- A. CREATE TABLE- B. CREATE DATABASE- C. DROP TABLE- D. ALTER TABLE2. 以下哪个不是Oracle数据库的数据类型?- A. NUMBER- B. CHAR- C. DATE- D. IMAGE3. 在Oracle数据库中,哪个命令用于删除表?- A. DELETE FROM- B. DROP TABLE- C. REMOVE TABLE- D. ERASE TABLE4. Oracle数据库中,如何查看当前用户?- A. SELECT USER FROM DUAL;- B. SELECT CURRENT_USER FROM DUAL;- C. SELECT USERNAME FROM ALL_USERS;- D. SELECT CURRENT_USER FROM ALL_USERS;5. 以下哪个命令用于在Oracle数据库中创建索引?- A. CREATE INDEX- B. CREATE KEY- C. CREATE CONSTRAINT- D. CREATE UNIQUE#### 二、填空题1. 在Oracle数据库中,使用____命令可以查看表结构。

2. Oracle数据库中,使用____命令可以查看当前数据库的所有表。

3. 要删除Oracle数据库中的行,可以使用____命令。

4. Oracle数据库中,____用于存储二进制数据。

5. Oracle数据库中,____命令用于查看数据库中所有的索引。

#### 三、简答题1. 描述Oracle数据库中事务的ACID属性。

2. 解释Oracle数据库中的锁定机制。

3. 说明Oracle数据库中视图的作用。

#### 四、操作题1. 创建一个名为`Employees`的表,包含以下字段:- `EmployeeID` NUMBER(10) PRIMARY KEY,- `FirstName` VARCHAR2(50),- `LastName` VARCHAR2(50),- `HireDate` DATE,- `Salary` NUMBER(10, 2),- `DepartmentID` NUMBER(10).2. 向`Employees`表中插入以下数据:- `EmployeeID`: 1001, `FirstName`: 'John', `LastName`:'Doe', `HireDate`: '2023-01-01', `Salary`: 70000,`DepartmentID`: 101.- `EmployeeID`: 1002, `FirstName`: 'Jane', `LastName`:'Smith', `HireDate`: '2023-02-15', `Salary`: 50000,`DepartmentID`: 102.3. 编写一个查询,显示所有员工的姓名和工资,按工资从高到低排序。

史上最全Oracle数据库基本操作练习题(含答案)

史上最全Oracle数据库基本操作练习题(含答案)

Oracle基本操作练习题使用表:员工表(emp):(empno NUMBER (4)notnull,--员工编号,表示唯一ename VARCHAR2 (10),--员工姓名job VARCHAR2 (9),--员工工作职位mgr NUMBER (4),--员工上级领导编号hiredate DATE,--员工入职日期salNUMBER (7,2),--员工薪水comm NUMBER (7,2),--员工奖金dept no NUMBER (2)—员工部门编号)部门表(dept):(deptno NUMBER (2)notnull,--部门编号dname VARCHAR2 (14),--部门名称locVARCHAR2 (13)—部门地址)说明:增删改较简单,这些练习都是针对数据查询,查询主要用到函数、运算符、模糊查询、排序、分组、多变关联、子查询、分页查询等。

建表脚本(根据需要使用): 建表脚本.txt练习题:1. 找出奖金高于薪水60%的员工信息。

SELECT * FROM emp WHERE comm>sal*0.6;2. 找出部门10中所有经理(MANAGER )和部门20中所有办事员(CLERK)的详细资料。

SELECT * FROM emp WHERE (JOB二'MANAGER' AND DEPTNO=10) OR (JOB二'CLERK' AND DEPTNO=20);3. 统计各部门的薪水总和。

SELECT dept no,SUM(sal) FROM emp GROUP BY dept no;4. 找出部门10中所有理(MANAGER ),部门20中所有办事员(CLERK)以及既不是经理又不是办事员但其薪水大于或等 2000的所有员工的详细资料。

SELECT * FROM emp WHERE (JOB二'MANAGER' AND DEPTNO=10) OR (JOB 二'CLERK' AND DEPTNO=20) OR (JOB NOT IN('MANAGER','CLERK') ANDSAL>2000);5. 列出各种工作的最低工资。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 经典练习题一.创建一个简单的PL/SQL程序块1.编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。

declarev_emp emp%rowtype;beginselect * into v_emp from emp where ename='SMITH';dbms_output.put_line('员工的工作是:'||v_emp.job||' ;他的薪水是:'||v_emp.sal);end;2.编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置。

方法一:(传统方法)declarepname dept.dname%type;ploc dept.loc%type;pdeptno dept.deptno%type;beginpdeptno:=&请输入部门编号;select dname,loc into pname,ploc from dept where deptno=pdeptno; dbms_output.put_line('部门名称: '||pname||'所在位置:'||ploc); exception –异常处理when no_data_foundthen dbms_output.put_line('你输入的部门编号有误!!');when othersthen dbms_output.put_line('其他异常');end;方法二:(使用%rowtype)declareerow dept%rowtype;beginselect * into erow from dept where deptno=&请输入部门编号;dbms_output.put_line(erow.dname||'--'||erow.loc);exceptionwhen no_data_foundthen dbms_output.put_line('你输入的部门号有误');when othersthen dbms_output.put_line('其他异常');end;3.编写一个程序块,利用%type属性,接受一个雇员号,从emp表中显示该雇员的整体薪水(即,薪水加佣金)。

declarepempno emp.empno%type;totalSal emp.sal%type;beginpempno:=&请输入员工编号;select sal+nvl(comm,0) into totalSal from emp where empno=pempno; dbms_output.put_line('该员工总共薪水'||totalSal);exceptionwhen no_data_foundthen dbms_output.put_line('你输入的员工编号有误!!');when othersthen dbms_output.put_line('其他异常');end;4.编写一个程序块,利用%rowtype属性,接受一个雇员号,从emp表中显示该雇员的整体薪水(即,薪水加佣金)。

declareerow emp%rowtype;beginselect * into erow from emp where empno=&请输入员工编号;dbms_output.put_line(erow.sal+nvl(m,0));exceptionwhen no_data_foundthen dbms_output.put_line('你输入的员工编号有误!!');when othersthen dbms_output.put_line('其他异常');end;5.某公司要根据雇员的职位来加薪,公司决定按下列加薪结构处理:Designation Raise-----------------------Clerk 500Salesman 1000Analyst 1500Otherwise 2000编写一个程序块,接受一个雇员名,从emp表中实现上述加薪处理。

declareerow emp%rowtype;beginselect * into erow from emp where ename='&name';if erow.job='Clerk'thenupdate emp set sal=sal+500where empno=erow.empno;elsif erow.job='Salesman'thenupdate emp set sal=sal+1000where empno=erow.empno;elsif erow.job='Analyst'thenupdate emp set sal=sal-1500where empno=erow.empno;elseupdate emp set sal=sal+2000where empno=erow.empno;end if;commit;exceptionwhen no_data_foundthen dbms_output.put_line('你输入的员工编号有误!!');when othersthen dbms_output.put_line('其他异常');end;6.编写一个程序块,将emp表中雇员名全部显示出来。

declarecursor cs is select ename from emp;beginfor erow in cs loopdbms_output.put_line(erow.ename);end loop;end;7.编写一个程序块,将emp表中前5人的名字显示出来。

方式一:declarecursor cs is select t.* from(select e.ename,rownum rm from emp e)t where t.rm between1and6;beginfor erow in cs loopdbms_output.put_line(erow.ename);end loop;end;方式二:--方式二declarecursor cs is select ename from emp;i number :=1;beginfor erow in cs loopdbms_output.put_line(erow.ename);i:=i+1; --迭代exit when i>5; --退出条件end loop;end;8.编写一个程序块,接受一个雇员名,从emp表中显示该雇员的工作岗位与薪水,若输入的雇员名不存在,显示“该雇员不存在”信息。

declarepjob emp.job%type;totalsal emp.sal%type;beginselect job,sal into pjob,totalsal from emp where ename='&请输入员工姓名';dbms_output.put_line(pjob ||'----' ||totalsal);exceptionwhen no_data_found thendbms_output.put_line('你输入的员工姓名有误!!');end;9.接受两个数相除并且显示结果,如果第二个数为0,则显示消息“除数不能为0”。

declarenum1 float;num2 float;res float;my_exception Exception;beginnum1:=&被除数;num2:=&除数;res:=num1/num2;raise my_exception;exceptionwhen my_exception thendbms_output.put_line(res);when others thendbms_output.put_line('除数不能为0');end;二.声明和使用游标------ 游标:(集合) ,处理返回多行记录的问题-- 声明游标--语法:cursor 游标名is DQL;-- 遍历游标/*1.打开游标, open 游标名;2.从游标中提取一行的记录:fetch 游标名into 变量名,...;3.使用循环,exit when 游标名%notfound;4.关闭游标,close 游标名;1.通过使用游标来显示dept表中的部门名称。

declarecursor co is select dname from dept;beginfor vname in coloopdbms_output.put_line(vname.dname);end loop;end;2.使用For循环,接受一个部门号,从emp表中显示该部门的所有雇员的姓名,工作和薪水。

declarecursor c_emp is select * from emp where deptno=&请输入部门号;beginfor erow in c_emp loopdbms_output.put_line(erow.ename ||' '||erow.job ||' '||erow.sal); end loop;exceptionwhen no_data_found thendbms_output.put_line('输入的部门编号有误');end;3.使用带参数的游标,实现第2题。

declarecursor c_cs(c_deptno number) is select* from emp where deptno=c_deptno; v_deptno number;beginv_deptno:=&请输入部门编号;for erow in c_cs(v_deptno) loopdbms_output.put_line(erow.ename ||' ' ||erow.job ||' '||erow.sal);end loop;exceptionwhen no_data_found thendbms_output.put_line('输入的部门编号有误');end;4.编写一个PL/SQL程序块,从emp表中对名字以“A”或“S”开始的所有雇员按他们基本薪水的10%给他们加薪。

相关文档
最新文档