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

史上最全Oracle数据库基本操作练习题(含答案)oracle基本操作练习题使用表格:员工表(emp):部:(deptnonumber(2)notnull,--部门编号dnamevarchar2(14),--部门名称locvarchar2(13)―部门地址)注:添加、删除和修改相对简单。
这些练习旨在进行数据查询。
查询主要使用函数、运算符、模糊查询、排序、分组、变量关联、子查询、分页查询等。
建表脚本(根据需要使用):创建表脚本1练习:2.找出部门10中所有经理(manager)和部门20中所有办事员(clerk)的详细资料。
从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)中选择*;3.统计各部门的薪水总和。
按deptno从empgroup中选择deptno,sum(sal);4.找出部门10中所有理(manager),部门20中所有办事员(clerk)以及既不是经理又不是办事员但其薪水大于或等2000的所有员工的详细资料。
从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)或(jobnotin('manager','clerk')和sal>2000)中选择*;5.列出各种工作的最低工资。
从empgroupbyjob中选择job,min(sal);26.列出每个部门经理的最低工资。
selectdeptno,min(sal)fromempwherejob='manager'groupbydeptno;7.了解领取奖金的员工的不同工作。
9.找出各月最后一天受雇的所有员工。
选择*fromempwherehiredate=最后一天(hiredate);10.显示所有员工的姓名,首字母大写。
oracle习题汇总答案

oracle习题汇总答案Oracle习题汇总答案在学习Oracle数据库的过程中,练习题是非常重要的一部分。
通过解答习题,我们可以更好地掌握数据库的知识和技能。
下面是一些常见的Oracle数据库习题及其答案汇总,希望能够帮助大家更好地学习和理解Oracle数据库。
1. 什么是Oracle数据库?Oracle数据库是一种关系型数据库管理系统,由美国Oracle公司开发。
它是目前世界上最流行的企业级数据库之一,被广泛应用于各种企业和组织的信息管理系统中。
2. Oracle数据库的特点有哪些?Oracle数据库具有高性能、高可用性、高安全性和可扩展性等特点。
它支持多种操作系统平台,能够处理大规模的数据,具有强大的事务处理能力和灵活的数据管理功能。
3. 如何创建一个新的数据库用户?可以使用CREATE USER语句来创建一个新的数据库用户,例如:```sqlCREATE USER new_user IDENTIFIED BY password;```4. 如何查询数据库中的表结构?可以使用DESCRIBE语句或者查询数据字典来查询数据库中的表结构,例如:```sqlDESCRIBE table_name;SELECT * FROM user_tab_columns WHERE table_name = 'table_name';```5. 如何在Oracle数据库中插入新的数据?可以使用INSERT INTO语句来插入新的数据,例如:```sqlINSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);```6. 如何更新数据库中的数据?可以使用UPDATE语句来更新数据库中的数据,例如:```sqlUPDATE table_name SET column1 = value1, column2 = value2 WHERE condition; ```7. 如何删除数据库中的数据?可以使用DELETE FROM语句来删除数据库中的数据,例如:```sqlDELETE FROM table_name WHERE condition;```通过不断地练习和积累,我们可以更加熟练地掌握Oracle数据库的知识和技能。
oracle练习及答案

oracle练习及答案测试⼀1.SQL*PLUS命令可以控制数据库(no)2.下⾯的语句是否可以执⾏成功(yes)select last_name , job_id , salary as salfrom employees;3.下⾯的语句是否可以执⾏成功(yes)select * from employees;4.找出下⾯语句中的错误select employee_id , last_namesal * 12 ANNUAL SALARYfrom employees;列于列之间未⽤逗号分隔别名应⽤引号括起来5.显⽰表departments的结构,并查询其中的全部数据desc departmentsselect * from departments;6.显⽰出表employees中的全部job_id(不能重复)select distinct job_idfrom employees;7.显⽰出表employees的全部列,各个列之间⽤逗号连接,列头显⽰成OUT_PUTselect EMPLOYEE_ID||','|| FIRST_NAME||','||LAST_NAME||','||EMAIL||','||PHONE_NUMBER||','||HIRE_DATE||','||JOB_ID||','||SALARY||','||COMMISSION_PCT||','||MANAGER_ID||','|| DEPARTMENT_ID as "OUT_PUT" from employees;测试⼆1.查询⼯资⼤于12000的员⼯姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary > 12000;2.查询员⼯号为176的员⼯的姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE employee_id = 176;3.选择⼯资不在5000到12000的员⼯的姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;4.选择雇⽤时间在1998-02-01到1998-05-01之间的员⼯姓名,job_id和雇⽤时间SELECT FIRST_NAME, job_id, hire_dateFROM employeesWHERE hire_date BETWEEN '01-2⽉-98' AND '01-5⽉-98';5.选择在20和50号部门⼯作的员⼯姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE department_id IN (20, 50);6.选择在1994年雇⽤的员⼯的姓名和雇⽤时间SELECT FIRST_NAME, hire_dateFROM employeesWHERE hire_date LIKE '%94';7.选择公司中没有管理者的员⼯姓名及job_idSELECT FIRST_NAME, job_idFROM employeesWHERE manager_id IS NULL;8.选择公司中有奖⾦的员⼯姓名,⼯资和奖⾦SELECT FIRST_NAME, salary, commission_pctFROM employeesWHERE commission_pct IS NOT NULL;9.选择员⼯姓名的第三个字母是a的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE FIRST_NAME LIKE '__a%';10.选择姓名中有字母a和e的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE (FIRST_NAME LIKE '%e%a%' OR FIRST_NAME LIKE '%a%e%')测试三1.显⽰系统时间Select sysdate "Date" from dual2.查询员⼯号,姓名,⼯资,以及⼯资提⾼百分之20%后的结果(new salary)select empno,ename,sal, round(sal*1.20,0) as“new salary” from emp;3.将员⼯的姓名按⾸字母排序,并写出姓名的长度(length)select ename "Name" ,length(ename) "Length" from emp order by substr(ename,1,1);4.查询各员⼯的姓名,并显⽰出各员⼯在公司⼯作的⽉份数(worked_month)。
Oracle试题(含答案)

Oracle试题(含答案)_C++_CSD/ESD14051. 把⼯资⼤于1000的first_name,salary 显⽰出来,按⼯资排序,⼯资相同按first_name降序的SQL语句是?A.select first_name,salary from s_emp order by salary,first_nameB.select first_name,salary from s_emp order by salary,first_name ascC.select first_name,salary from s_emp order by salary desc,first_nameD. select first_name,salary from s_emp order by salary,first_name desc正确答案:D2. 已知数据库中有员⼯表s_emp和部门表s_dept,具体字段如下:员⼯表字段介绍:ID 员⼯编号LAST_NAME 员⼯姓FIRST_NAME 员⼯名USERID ⽤户编号START_DATE ⼊职⽇期COMMENTS 员⼯备注信息MANAGER_ID 员⼯的领导IDTITLE 员⼯的职位DEPT_ID 部门的编号SALARY 员⼯的⽉薪COMMISSION_PCT 提成部门表的字段介绍:ID 部门编号NAME 部门名REGION_ID 地区编号注:以下所有数据库相关题⽬,均使⽤这两个表把s_emp表中的每个⼈的全名和⼯资列出来的SQL语句是?A.select first_name|last_name ,salary from s_empB.select first_name||last_name ,salary from s_empC.select first_name|last_name ,salary from empD. select first_name||last_name ,salary from emp正确答案:B3. 如果想在代码中禁⽌使⽤goto,可以采⽤的是?A. #pragma GCC dependency gotoB. #pragma GCC poison gotoC. #pragma pack(2)D. #pragma GCC goto正确答案:B4.阅读如下代码:void* p = sbrk(0);int r = brk(p+4);brk(p+8);brk(p+4);请问⽬前占⽤的内存空间字节是?A. 16B. 8C. 4D. 0正确答案:C5. 查找和Smith⼀个title的所有员⼯的名字的SQL语句是?A. SELECT last_name from s_emp where title=(select title from s_emp wherelast_name=’Smith’)B. SELECT last_name from s_emp where title=(select title from s_emp wherelast_name=”Smith”)C. SELECT last_name from s_emp where title=(select last_name,title from s_emp where last_name=’Smith’)D. SELECT last_name from s_emp where title=(select title from s_emp last_name=’Smith’)正确答案:A6. 下列函数中不能处理错误的是?A. exitB. printfC. perrorD. strerror正确答案:A7. 关于信号,以下说法错误的是?A. 信号分为可靠信号和不可靠信号B. 信号的默认处理 ,80%的情况是退出进程C. 所有信号都可以忽略D. 当前⽤户只能给⾃⼰的进程发信号,不能给别的⽤户的进程发信号正确答案:C8. 下列关于进程描述符说法错误的是?A. getpid 获取进程ID。
Oracle经典练习题(很全面)讲解学习

O r a c l e经典练习题(很全面)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 wheredeptno=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试题(含答案)

正确答案:D2.已知数据库中有员工表 员工表字段介绍:IDLAST_NAME FIRST_NAMEUSERID START_DATE COMMENTSMANAGER_ID TITLE DEPT_ID SALARYCOMMISSION_PCT 部门表的字段介绍:ID部门编号 NAME部门名REGION_ID 地区编号 注:以下所有数据库相关题目,均使用这两个表 把s_emp 表中的每个人的全名和工资列出来的A.select first_ name|last_ name ,salary from s_empC++CSD/ESD14051.把工资大于 1000 的 first_name,salarySQL 语句是? select A.first_ name,salary froms_emp tdJ B.select first_ name,salary froms_emp L C.selectfirst_ name,salary from s_emp order by salary,first_ name order by salary,first_ name asc order by salary desc,first_ name 显示出来,按工资排序,工资相同按 first 」ame 降序的 D. select first_ name,salary from s_emp order by salary,first_ name desc s_emp 和部门表s_dept ,具体字段如下员工编号 员工姓 员工名 用户编号 入职日期员工备注信息 员工的领导ID员工的职位部门的编号员工的月薪提成 SQL 语句是?B.select first_ name||last_ name ,salary from s_empselect first_ name|last_ name ,salary from empnD. select first_ name||last_ name ,salary from emp正确答案:B3.如果想在代码中禁止使用goto,可以采用的是?A. #pragma GCC depe ndency gotoa B. #pragma GCC pois on goto- C. #pragma pack(2)D. #pragma GCC goto正确答案: B4.阅读如下代码:void* p = sbrk(O);int r = brk(p+4);brk(p+8);brk(p+4);请问目前占用的内存空间字节是?A.16D. 0正确答案:C5.查找和Smith 一个title 的所有员工的名字的SQL语句是?A.SELECT last_ name from s_emp where title=(select title from s_emp wherelast_name= ' Smith')B.SELECT last_ name from s_emp where title=(select title from s_emp wherelast_name= ” Smith ”)‘ C. SELECT last_ name from s_emp where title=(select last_ name,title from s_emp wherelast_name= ' Smith')D. SELECT last_name from s_emp where title=(select title from s_emp last_name= ' Smith') 正确答案:A6.下列函数中不能处理错误的是?A. exit□B. printf厂C. perror- D. strerror正确答案: A7.关于信号,以下说法错误的是?」 A.信号分为可靠信号和不可靠信号口 B.信号的默认处理,80%的情况是退岀进程“ C.所有信号都可以忽略D.当前用户只能给自己的进程发信号,不能给别的用户的进程发信号正确答案:Cw8.下列关于进程描述符说法错误的是?rr A. getpid 获取进程ID。
史上最全Oracle数据库基本操作练习题(含答案)

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数据库基本操作练习题(含答案)

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.列出各种工作的最低工资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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.emp where deptno = '10' and job = 'MANAGER' union select * from scott.emp where job = 'CLERK' and deptno = '20' /*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工 */ select * from scott.emp where 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.emp where comm is not null and comm > 500 /*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面 */ select ename from scott.emp order by (months_between(sysdate, hiredate) / 12) desc
select 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 deptno when 10 then '部门10' when 20 then '部门20' when 30 then '部门30' when 40 then '部门40' else '其他部门' end 工资情况 from scott.emp
select 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 ename from scott.emp where deptno = 30 and 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 e where 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) e2 where sal > sals and e1.deptno = e2.deptno /*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */ select avg(nvl(comm,0)), sum(sal + nvl(comm, 0)) from scott.emp group 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.emp wherescott.dept.deptno = scott.emp.deptno(+) /*23、使用此语句重复的内容不再显示了*/ select distinct (job) from scott.emp /*24、重复的内容依然显示 */ select * from scott.emp UNION ALL select * from scott.emp /*23和24题和22题是一样的 */
/*25、只显示了两个表中彼此重复的记录。*/ select * fromscott.dept, scott.emp wherescott.dept.deptno(+) = scott.emp.deptno /*26、只显示了两张表中的不同记录*/ select * from scott.emp union select * from scott.emp minus (select * from scott.emp intersect select * from scott.emp)
(select * from scott.emp minus select * from scott.emp) union (select * from scott.emp minus select * from scott.emp) 表结构相同先union 只能有 - /*27、列出员工表中每个部门的员工数,和部门no */ select count(ename), deptno from scott.emp group by deptno /*28、列出员工表中每个部门的员工数(员工数必须大于3),和部门名称*/ select count(deptno), deptno, (selectdname from scott.dept where scott.dept.deptno = e1.deptno) from scott.emp e1 group by deptno having count(deptno)>3 /*29、找出工资比jones多的员工*/ select * from scott.emp where sal > (select sal from scott.emp where ename = 'JONES') /*30、列出所有员工的姓名和其上级的姓名 */ select ename, (select ename from scott.emp e1 where e1.empno = e2.mgr) 上级的姓名 from scott.emp e2 /*31、以职位分组,找出平均工资最高的两种职位 */ select job from scott.emp group by job having avg(sal) in (select max(sal) from scott.emp group by job )
select job from (select job, avg(sal) from scott.emp group by job order by avg(sal) desc) whererownum<= 2
最大的: select max(max_sal) from (select job, avg(sal) max_sal from scott.emp group by job) /*32、查找出不在部门20,且比部门20中任何一个人工资都高的员工姓名、部门名称*/
select ename, dname from scott.emp e1, scott.dept e2 where e1.deptno = e2.deptno