Oracle经典练习题(很全面)
- 格式:doc
- 大小:69.50 KB
- 文档页数:10
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数据库的知识。
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)利用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试题一、选择题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)第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数据库练习题#### 一、选择题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基本操作练习题使用表:员工表(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. 列出各种工作的最低工资。
Oracle测试题(卷)+答案解析1) PL/SQL块中可以使用下列()命令。
(选择两项)a) TRUNCATEb) DELETEc) SA VEPOINTd) ALTER TABLE2) 授予sa用户在SCOTT.EMP表中SAL列的更新权限的语句是(B)〔选择一项〕a) GRANT CHANGE ON SCOTT.EMP TO SAb) GRANT UPDA TE ON SCOTT.EMP(SAL) TO SAc) GRANT UPDA TE (SAL) ON SCOTT.EMP TO SAd) GRANT MODIFY ON SCOTT.EMP(SAL) TO SA3) EMP表有14条记录,则语句SELECT ‘Aptech’FROM EMP 的执行结果是(C)〔选择一项〕a) Aptechb) 无输出c) 14行Aptechd) 编译出错4) PL/SQL块中哪几部分是可选的()〔选择二项〕a) Declareb) Beginc) Exceptiond) Constant5) 在创建序列的过程中,下列()选项指定序列在达到最大值或最小值后,将继续从头开始生成值。
(选择一项)a) Cycleb) Nocyclec) Cached) Nocache6) 同义词有以下()用途。
(选择三项)a) 简化SQL 语句b) 隐藏对象的名称和所有者c) 提供对对象的公共访问d) 显示对象的名称和所有者7) Oracle中用来释放锁的语句有()〔选择二项〕a) commitb) Drop lockc) rollbackd) unlock8) 关于类型定义Number(9,2)说确的有()〔选择一项〕a) 整数部分9位,小数部分2位,共11位b) 整数部分7位,小数部分2位,共9位c) 整数部分6位,小数点一位,小数部分2位,共9位d) 以上说法均不正确9) 下列哪种Lob类型用来存储数据库以外的操作系统文件()〔选择一项〕a) CLOBb) BLOBc) CFILEd) BFILE10) Oracle中的三种系统文件分别是()〔选择三项〕a) 数据文件b) 归档文件c) 日志文件d) 控制文件11) 下列哪项不是Oracle中常用的分区方法?()〔选择一项〕a) 围分区b) 散列分区c) 列表分区d) 条件分区12) 查看Test中名称为P1的分区中的记录的查询语句为()〔选择一项〕a) Select * from Test Where PartitionName=’p1’b) Select * from Test(p1)c) Select * from Test Partition(p1);d) 以上均正确13) 创建序列时,若未指定Cycle选项,则当当前值大于MaxValue时将()〔选择一项〕a) 从MinValue重新开始循环b) 重复使用MaxValue 值c) 执行出错d) 使用随机值14) 下列哪项是创建索引组织表所必需的()〔选一项〕a) Primary Keyb) Order Byc) Group Byd) 以上均不是15) 若表的某字段值存在大量的重复,则基于该字段适合创建哪种索引?()〔选一项〕a) 标准索引b) 唯一索引c) 位图索引d) 分区索引16) 在PL/SQL块中定义一个名为PI值为3.14的Real型常量的语法是()〔选一项〕a) A.Pi Const Real=3.14;b) B.Pi Real Const =3.14;c) C.Constant Pi Real:=3.14d) D.Pi Constant Real:=3.1417) 22.当Select语句没有返回行时,将引发下列哪个异常?()[选择一项]a) A.No_rows_foundb) B.No_data_foundc) C.No_Data_rows_foundd) D.Invalid_Number18) Oracle中提供的两种游标是()〔选择二项〕a) A.隐式游标b) B.静态游标c) C.REF游标d) D.显式游标19) 若Emp表中有14条记录,则用户执行了以下操作,结果是:()〔选择一项〕Cursor mycur is Select * From emp;。
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表中显示该雇员的整体薪水(即,薪水加佣金)。
ORACLE测试题一、选择题:(本题共20个小题,每小题2分,共40分)1。
下列哪个子句实现对一个结果集进行分组和汇总( D )。
A.HAVINGB.ORDER BY C。
WHERE D.GROUP BY2.在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字,则Oracle 就将( C )表空间分配给用户作为默认表空间。
A.HR B.SCOTT C.SYSTEM D.SYS3。
有字符串数据"test”分别存放到char(10)和varchar2(10)类型的字段中,其实际存储长度为( A )A。
10 4 B。
4 4 C。
10 10 D. 4 104.在Oracle中,当控制一个显式游标时,下面哪种命令包含INTO子句()。
A. FETCH B。
CLOSE C。
OPEN D。
CURSOR5. 在Oracle中,有一个教师表teacher的结构如下:ID NUMBER(5),NAME VARCHAR2(25),EMAIL VARCHAR2(50)下面哪个语句显示没有Email地址的教师姓名(C)A.SELECT name FROM teacher WHERE email = NULL;B.SELECT name FROM teacher WHERE email <> NULL;C.SELECT name FROM teacher WHERE email IS NULL;D.SELECT name FROM teacher WHERE email IS NOT NULL;6。
如果a表原本是空表,请问执行下列语句后,以下哪个表述正确(A)insert into a values(1,'abc’,’1’);insert into a values(2,’abc’,’2’);create table b as select * from a;rollback;A.a表b表都没有数据B.a表b表都有两行数C.a表有数据,b表没有数据D.a表没有数据,b表有数据7. 如何删除sales表中产品类型为toys的profits列的列值?BA。
Oracle基本操作练习题使用表:员工表(emp):(empnoN UMBER(4)notnul l,--员工编号,表示唯一enameV ARCHA R2(10),--员工姓名job VARCHA R2(9),--员工工作职位mgrNUM BER(4),--员工上级领导编号hireda teDAT E,--员工入职日期salNUM BER(7,2),--员工薪水commNU MBER(7,2),--员工奖金deptno NUMBE R(2)—员工部门编号)部门表(dept):(deptno NUMBE R(2)notnul l,--部门编号dnameV ARCHA R2(14),--部门名称locVAR CHAR2(13)—部门地址)说明:增删改较简单,这些练习都是针对数据查询,查询主要用到函数、运算符、模糊查询、排序、分组、多变关联、子查询、分页查询等。
建表脚本.txt建表脚本(根据需要使用):练习题:1.找出奖金高于薪水60%的员工信息。
SELECT * FROM emp WHEREcomm>sal*0.6;2.找出部门10中所有经理(MANAGE R)和部门20中所有办事员(CLERK )的详细资料。
SELECT* FROM emp WHERE(JOB='MANAGE R' AND DEPTNO=10) OR (JOB='CLERK' AND DEPTNO=20);3.统计各部门的薪水总和。
SELECT deptno,SUM(sal) FROM emp GROUPBY deptno;4.找出部门10中所有理(M ANAGE R),部门20中所有办事员(C LERK 以及既不是经理又不是办事员但其薪水大于或等2000的所有员工的)详细资料。
Oracle 练习题一、基本概念1. Oracle 数据库是一种什么类型的数据库管理系统?2. 请简述 Oracle 数据库的主要特点。
3. Oracle 数据库中的表空间有什么作用?4. 什么是 Oracle 数据库的实例?5. Oracle 数据库中的数据字典是什么?二、SQL 基础1. 数据定义语言(DDL)1. 如何创建一个名为 `employees` 的表,包含字段`employee_id`(整数型),`employee_name`(字符串型)和`salary`(浮点型)?2. 如何修改表 `employees`,增加一个 `department_id` 字段?3. 如何删除表 `employees`?4. 如何重命名表 `employees` 为 `staff`?2. 数据操纵语言(DML)1. 向 `employees` 表插入一条新记录,`employee_id` 为 1001,`employee_name` 为 '',`salary` 为 8000。
2. 更新 `employees` 表中 `employee_id` 为 1001 的记录,将`salary` 修改为 9000。
3. 删除 `employees` 表中 `employee_id` 为 1001 的记录。
4. 如何查询 `employees` 表中 `salary` 大于 8000 的所有员工信息?3. 数据查询语言(DQL)1. 查询 `employees` 表中所有员工的信息。
2. 查询 `employees` 表中 `department_id` 为 2 的所有员工信息。
3. 查询 `employees` 表中 `salary` 最低的员工信息。
4. 查询 `employees` 表中按 `salary` 升序排列的前 5 条记录。
4. 数据控制语言(DCL)1. 如何给用户 `user1` 授予对 `employees` 表的查询权限?2. 如何撤销用户 `user1` 对 `employees` 表的查询权限?3. 如何创建一个角色 `role1`,包含对 `employees` 表的增、删、改、查权限?4. 如何将角色 `role1` 授权给用户 `user2`?三、函数与表达式1. 如何使用 Oracle 函数计算 `employees` 表中所有员工的年薪?2. 编写一个查询,返回 `employees` 表中 `employee_name` 的长度。
Oracle PL/SQL测试题姓名:___ _________ 一、选择题1、Oracle数据库中为新创建的表分配的初始空间通常为多大(B)A、一个块、一个块B、一个区、一个区C、一个段、一个段D、c一个表空间一个表空间2、关于存储过程参数,正确的说法是(B)A、存储过程的输出参数可以是标量类型,也可以是表类型、存储过程的输出参数可以是标量类型,也可以是表类型B、存储过程输入参数可以不输入信息而调用过程、存储过程输入参数可以不输入信息而调用过程C、可以指定字符参数的字符长度(函数的()或者过程的(number/varchar2))D、以上说法都不对、以上说法都不对3、下列说法,正确的说法是(B)A、只要在存储过程中有增删改语句,一定加自治事务、只要在存储过程中有增删改语句,一定加自治事务B、在函数内可以修改表数据、在函数内可以修改表数据C、函数不能递归调用、函数不能递归调用D、以上说法都不对、以上说法都不对4、有一产品表(编号,名称,价格,数量,所属分类),下列语法不正确的是(D)A、select * from 产品表产品表 where价格>1000 产品表B、select sum(价格所属分类 having max(价格价格)>1000 产品表 group by 所属分类价格) from 产品表C、select所属分类,sum(价格) from 产品表所属分类产品表 where 价格>1000 group by 所属分类D、select所属分类,sum(价格) from 产品表所属分类产品表 where max(价格)>1000 group by 所属分类5、关于触发器,下列说法正确的是(B)A、可以在表上创建INSTEAD OF 触发器触发器B、语句级触发器不能使用“:old”和“:new”C、行级触发器不能用于审计功能、行级触发器不能用于审计功能D、触发器可以显式调用、触发器可以显式调用6、下列那些是Oracle的伪列(ACD)A、ROWID B、ROW_NUMBER() C、LEVEL D、ROWNUM E、COLUMN 7、当表的重复行数据很多时,应该创建的索引类型应该是(、当表的重复行数据很多时,应该创建的索引类型应该是( C )A、B树B 、reverse C 、bitmap D 、函数索引、函数索引8、在建表时如果希望某列的值,在一定的范围内,应建什么样的约束?(C )A 、primary key B 、unique C 、check D 、not null 9、利用游标来修改数据时,所用的。
o r a c l e练习题及答案(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--试题一一、填空题(每小题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、数据库概念模型主要用于数据库概念结构设计(T)三、简答题(每小题7分,共35分)1、何谓数据与程序的逻辑独立性和物理独立性2、试述关系代数中等值连接与自然连接的区别与联系3、何谓数据库,数据库设计一般分为哪些阶段4、简述Oracle逻辑数据库的组成5、试任举一例说明游标的使用方法五、设有雇员表emp(empno,ename,age,sal,tel,deptno),其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话deptno-----部门号。
请按下列要求分别晨SQL*PLUS下编程。
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基本操作练习题使用表:员工表(emp):(empno NUMBER(4)notnull,--员工编号,表示唯一ename VARCHAR2(10),--员工姓名job VARCHAR2(9),--员工工作职位mgr NUMBER(4),--员工上级领导编号hiredate DATE,--员工入职日期sal NUMBER(7,2),--员工薪水comm NUMBER(7,2),--员工奖金deptno NUMBER(2)—员工部门编号)部门表(dept):(deptno NUMBER(2)notnull,--部门编号dname VARCHAR2(14),--部门名称loc VARCHAR2(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 deptno,SUM(sal) FROM emp GROUP BY deptno;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') AND SAL>2000);5.列出各种工作的最低工资。
Oracle考试试题(带答案)一、选择(每题3分)1) 当Oracle服务器启动时,下列哪种文件不是必须的()。
a) 数据文件b) 控制文件c) 日志文件d) 归档日志文件参考答案 D2) 在Oracle中,当用户要执行SELECT语句时,下列哪个进程从磁盘获得用户需要的数据()。
a) 用户进程b) 服务器进程c) 日志写入进程(LGWR)d) 检查点进程(CKPT)参考答案 B3) 在Oracle中,一个用户拥有的所有数据库对象统称为()。
a) 数据库b) 模式c) 表空间d) 实例参考答案 B4) 在Oracle中,可用于提取日期时间类型特定部分(如年、月、日、时、分、秒)的函数有()。
a) DA TEPARTb) EXTRACTc) TO_CHARd) TRUNC参考答案bc5) 在Oracle中,有一个教师表teacher的结构如下:ID NUMBER(5)NAME V ARCHAR2(25)EMAIL VARCHAR2(50)下面哪个语句显示没有Email地址的教师姓名()。
a) SELECT name FROM teacher WHERE email = NULL;b) SELECT name FROM teacher WHERE email <> NULL;c) SELECT name FROM teacher WHERE email IS NULL;d) SELECT name FROM teacher WHERE email IS NOT NULL;参考答案 C6) 在Oracle数据库的逻辑结构中有以下组件:A 表空间B 数据块C 区D 段这些组件从大到小依次是()。
a) A→B→C→Db) A→D→C→Bc) A→C→B→Dd) D→A→C→B参考答案 b7) 在Windows操作系统中,Oracle的()服务监听并接受来自客户端应用程序的连接请求。
a) OracleHOME_NAMETNSListenerb) OracleServiceSIDc) OracleHOME_NAMEAgentd) OracleHOME_NAMEHTTPServer参考答案 a8) 在Windows操作系统中,Oracle的()服务是使用iSQL*Plus 必须的。
史上最全Oracle数据库基本操作练习题(含答案)汇编Oracle基本操作练习题使用表:员工表(emp):(empnNUMBER)notnull,--员工编号,表示唯ename/ARCHAR20),--员工姓名job VARCHAR9),--员工工作职位mgrNUMBER),--员工上级领导编号hiredate DATE-员工入职日期sal NUMBER, 2),--员工薪水comrNUMBER, 2),--员工奖金dept no NUMBER)—员工部门编号)部门表(dept):(dept no NUMBER) not null ,--部门编号dnameVARCHAR24),--部门名称loc VARCHAR23)—部门地址排序、分组、多变关联、子查询、分页查询等。
建表脚本(根据需要使用): 建表脚本.txt说明:增删改较简单,这些练习都是针对数据查询, 查询主要用到函数、运算符、模糊查询、练习题:1. 找出奖金高于薪水60%勺员工信息。
SELECT * FROM emp WHERE comm>sal*0.6;2. 找出部门10中所有经理(MANAGE和部门20中所有办事员(CLER) 的详细资料。
SELECT* FROMemp WHER&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中所有办事员(CLER)以及既不是经理又不是办事员但其薪水大于或等2000的所有员工的详细资料。
SELECT* FROMemp WHER&JOB二'MANAGER'AND DEPTNO=10)OR (JOB='CLERK' ANDDEPTNO=20OR(JOB NOTIN('MANAGER','CLERK') AND SAL>2000);5. 列出各种工作的最低工资。
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%给他们加薪。