oracle数据库增删改查练习50例-答案(精)
- 格式:doc
- 大小:50.00 KB
- 文档页数:13
史上最全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查询练习及答案分类:技术文档2012-09-16 15:30 383人阅读评论(0) 收藏举报oracletableinsertdelete工作null--1 显示所有部门名select dnamefrom dept--2 显示所有雇员名及其全年收入(工资+补助),并指定列别名"年收入"select ename,nvl2(comm,sal+comm,sal) as 年收入from emp--3 显示存在雇员的所有部门号select distinct deptnofrom emp--4 显示工资超过2850的雇员名和工资select ename,salfrom empwhere sal > 2850--5 显示工资不在1500到2850之间的所有雇员名及工资select ename,salfrom empwhere sal not between 1500 and 2850--6 显示雇员代码为7566的雇员名及所在部门号select ename,deptnofrom empwhere empno = 7566--7 显示部门代码为10和30中工资超过1500的雇员名及工资select ename,salfrom empwhere sal > 1500 and deptno in (10,30)--8 显示无管理者的雇员名及岗位select ename,jobfrom empwhere mgr is null--9 显示所有雇员的平均工资、总计工资、最高工资、最低工资select avg(sal) as 平均工资,sum(sal) as 总计工资max(sal) as 最高工资min(sal) as 最低工资from emp--10 显示每种岗位的雇员总数、平均工资select job,count(*),avg(sal)from empgroup by job--11 显示雇员总数,以及获得补助的雇员数select count(*),count(comm)from emp--12 显示管理者的总人数select count(distinct mgr)from emp--13 显示雇员工资的最大差额select max(sal) - min(sal)from emp--14 显示部门代码为20的部门号,以及该部门的所有雇员名、雇员工资及岗位select ename,sal,jobfrom empwhere deptno = 20--15 显示获得补助的所有雇员名、补助额以及所在部门号select deptno,ename,commfrom empwhere comm is not null--16 显示所有雇员的姓名、部门编号、工资,并且列名要显示为中文select ename as 姓名,deptno as 部门编号,sal as 工资from emp--17 显示每个部门每个岗位的平均工资、每个部门的平均工资、每个岗位的平均工资select deptno,job,avg(sal)from empgroup by cube(deptno,job)--18 显示工资大于1500的雇员名和工资,并且按照工资的降序排列select ename,salfrom empwhere sal > 1500order by sal desc--19 显示雇员部门编号为10或20的信息(要求使用IN关键字)select *from empwhere deptno in (10,20)--20 显示雇员名的第二个字母为A的信息select enamefrom empwhere ename like '_A%'--21 显示没有发放补助的雇员信息select *from empwhere comm is null--22 显示雇员表中记录总数select count(*)from emp以scott/tiger登录数据库,完成以下题目--1 显示所有雇员名、雇员工资及所在部门名select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptno--2 显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptnoand d.deptno = 20--3 显示所有雇员名、雇员工资及工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisal--4 显示雇员"SCOTT"的管理者名select m.enamefrom emp e,emp mwhere e.mgr = m.empnoand e.ename = 'SCOTT'--5 显示获得补助的所有雇员名、补助额以及所在部门名select d.dname,e.ename,mfrom dept d,emp ewhere d.deptno = e.deptnoand m is not null--6 查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisaland e.deptno = 20--7 显示部门代码为10的所有雇员名、部门名,以及其他部门名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno = e.deptno(+)and e.deptno(+) = 10--8 显示部门代码为10的所有雇员名、部门名,以及其他雇员名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno(+) = e.deptnoand d.deptno(+) = 10--9 显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名select e.ename,d.dnamefrom dept d full join emp eon d.deptno = e.deptnoand d.deptno = 10--10显示"BLAKE"同部门的所有雇员,但不显示"BLAKE"select e.ename,e.deptnofrom emp e,emp bwhere e.deptno = b.deptnoand e.ename <> 'BLAKE'and b.ename = 'BLAKE'--01 按以下格式显示下面的信息,条件是工资大于1500的。
oracle数据库单表查询相关练习题及答案写法drop table PRODUCT cascade constraints;create table PRODUCT(id NUMBER not null, --主键pcode VARCHAR2(20) not null, --商品编号pname VARCHAR2(20), --商品名称inprice NUMBER(7,2), --进价outprice NUMBER(7,2), --售价toma VARCHAR2(20), --管理员名称lastcou NUMBER, --剩余库存数量ptype VARCHAR2(5), --商品类型mark NUMBER, --有效标志createtime DATE --⽣产⽇期);alter table PRODUCTADD CONSTRAINT pk_product primary key (ID);insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (1, 'f-qq45', '⾹蕉', 2.8, 4, '张三', 12, 'a', 1, to_date('05-06-2017', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (2, 'f-56tt', '苹果', 3.4, 5, '张三', 33, 'a', 1, to_date('16-06-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (3, 'f-332', '梨', 2.7, 4, '张三', 76, 'a', 1, to_date('23-09-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (4, 'f-20', '猪⾁', 14, 16, '张三', 56, 'b', 1, to_date('31-12-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (5, 'f-qq46', '圆珠笔', 3, 5, '王五', 55, 'e', 1, to_date('14-09-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (6, 'f-57tt', '樱桃', 8, null, '王五', 12, 'a', 1, to_date('22-05-2006', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (7, 'f-292', '三⽂鱼', 5, 8, '王五', 23, 'b', 1, to_date('31-07-2001', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (8, 'f-604', '螺丝⼑', 12, 15, '王五', 72, 'c', 1, to_date('24-02-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (9, 'f-qq47', '扳⼿', 14, 19, '王五', 90, 'c', 1, to_date('14-05-2015', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (10, 'f-58tt', '钳⼦', 10, 13, '张三', 97, 'c', 1, to_date('28-03-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (11, 'f-916', '矿泉⽔', 2.5, 3, '李四', 44, 'd', 1, to_date('21-07-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (12, 'f-1228', '杏仁露', 4, 5, '李四', 38, 'd', 1, to_date('22-02-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (13, 'f-59tt', '钢笔', null, 43, '李四', 22, 'e', 1, to_date('30-09-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (14, 'f-1540', '铅笔', .5, .8, '赵六', 72, 'e', 1, to_date('14-05-2018', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (15, 'f-1852', '⼤马哈鱼', 1.5, 2, '赵六', 76, 'b', 1, to_date('17-05-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (16, 'f-2164', '鸡蛋', 2.7, 4, '赵六', 56, 'b', 1, to_date('14-09-2010', 'dd-mm-yyyy'));commit;-- 使⽤insert into任意添加三条数据(数据信息⾃定)加到这个表中-- 删除'猪⾁'的那条记录-- 将扳⼿和钳⼦的商品名称分别改为'16号扳⼿'和'⼩号钳⼦', 并将这两个商品的管理⼈员都改为'赵六'-- 查询商品类型为'a'的所有商品-- 查询王五负责的c类商品-- 查询剩余数量⼩于50的所有商品-- 查询剩余数量在60-80之间的-- 查询商品名称带'笔'的和带'鱼'的记录-- 查询商品编号中带'tt'的记录-- 查询商品类型为a, d, c的所有商品-- 查询所有'e'类型商品, 并按照剩余库存数量排序-- 查询管理商品数少于4的管理员名称和管理的商品数量-- 查询所有的管理员名称和其⼿上所管理的所有商品数量-- 查询所有的管理员名称和其⼿上所管理的所有'a'类商品名称的数量-- 查询所有商品中剩余数量最少的⼀个-- 查询⽣产⽇期在2015/5/31之前的数据-- 假设所有商品的有效期是⼀年, 以当前系统时间为标准, 查询所有商品的信息, 并且加⼀列标注是否过期-- 查询每个管理员所管理的商品的平均进价价格和售价价格-- 查询每个管理员⼿上的商品的利润的平均值-- 查询假设每个管理员把所有商品售完后各⾃的利润总和答案:--SELECT * FROM product/*INSERT INTO productVALUES(50,'qqwweerr','⾖腐',2.5, 3, '张三', 30, 'b', 1, SYSDATE);COMMIT;*//*DELETE product p WHERE p.pname='猪⾁';COMMIT;*//*UPDATE product p SET p.pname='16号扳⼿', p.toma='赵六' WHERE p.pname='扳⼿';UPDATE product p SET p.pname='⼩号钳⼦', p.toma='赵六'WHERE p.pname='钳⼦';COMMIT;*/--SELECT * FROM product p WHERE p.ptype='a';--SELECT * FROM product p WHERE p.ptype='c' AND p.toma='王五';--SELECT * FROM product p WHERE stcou<50;--SELECT * FROM product p WHERE stcou <80 AND stcou > 60; --SELECT * FROM product p WHERE stcou BETWEEN 60 AND 80;/*SELECT * FROM product pWHERE p.pname LIKE '%笔%' OR p.pname LIKE '%鱼%';*/--SELECT * FROM product p WHERE p.pcode LIKE '%tt%';/*SELECT * FROM product p WHERE p.ptype IN ('a','c','d');SELECT * FROM product p WHERE p.ptype = 'a'OR p.ptype = 'c'OR p.ptype = 'd'*/--SELECT * FROM product p--WHERE p.ptype='e' ORDER BY stcou ASC或者desc/*SELECT p.toma, COUNT(p.pname) 管理的商品数FROM product p GROUP BY p.tomaHAVING COUNT(p.pname) < 4*//*SELECT p.toma, COUNT(p.pname) 管理的商品数FROM product p GROUP BY p.toma*//*SELECT p.toma, SUM(DECODE(p.ptype, 'a', 1, 0))FROM product p GROUP BY p.tomaSELECT p.toma, COUNT(p.ptype) FROM product pWHERE p.ptype='a' GROUP BY p.toma*//*SELECT * FROM product pWHERE stcou<=ALL(SELECT lastcou FROM product)*//*SELECT * FROM product pWHERE stcou=(SELECT MIN(lastcou) FROM product)*//*SELECT * FROM product pWHERE p.createtime < to_date('20150531','yyyymmdd')*//*SELECT p.pname, CASE WHEN (SYSDATE-p.createtime) > 365 THEN '过期' ELSE '正常' END 是否过期FROM product p*//*SELECT p.toma, AVG(p.inprice), round(AVG(p.outprice), 2) FROM product pGROUP BY p.toma*//*SELECT p.toma, AVG(p.outprice-p.inprice)FROM product p GROUP BY p.toma*/SELECT p.toma, SUM((p.outprice-p.inprice)* stcou) 利润总和FROM product p GROUP BY p.toma。
题目:“alter table tab1 drop column col1;”的作用是()。
选项A:以上都不对选项B:为数据表tab1增加了字段col1选项C:删除了数据表tab1的字段col1选项D:修改数据表tab1的字段column名称为col1答案:删除了数据表tab1的字段col1题目:“alter table tab1 modify (name char(32));”的作用是()。
选项A:修改了字段name的名称选项B:修改了数据表tab1的名称为name选项C:以上都不对选项D:修改了字段name的大小答案:修改了字段name的大小题目:删除数据表tab1的语法是()。
选项A:delete tab1选项B:delete table tab1选项C:drop table tab1选项D:desc tab1答案:drop table tab1题目:数据表创建后不能增加新的字段。
选项A:对选项B:错答案:错题目:数据表名可以修改。
选项A:对选项B:错答案:对题目:数据表是一个二维的数据结构,由字段和对应数据构成数据存储的结构。
选项A:对选项B:错答案:对题目:“create table clubak as select * from clu$;”的作用是什么?答案:答:建表从这个表里选择制定的列。
题目:简述建表时常用的数据类型。
答案:答:建表时可用的数据类型包括:(1) CHARACTER,字符/字符串。
(2) VARCHAR或CHARACTER、VARYING,字符/字符串。
(3) BINARY,二进制串。
(4) BOOLEAN,存储TRUE或FALSE值。
(5) VARBINARY或BINARY、VARYING,二进制串。
可变长度。
(6) INTEGER(p),整数值(没有小数点)。
oracle数据库的试题及答案一、选择题1. Oracle数据库是一种()数据库管理系统。
A. 非关系型B. 关系型C. 分布式D. 图形化2. 数据库中,将所有数据进行分类和组织的基本单位是()。
A. 表B. 字段C. 记录D. 数据库3. 在Oracle数据库中,用于删除表中所有数据的操作是()。
A. DELETEB. REMOVEC. DROPD. TRUNCATE4. 在Oracle数据库中,用于更新表中数据的操作是()。
A. UPDATEB. MODIFYC. ALTERD. REPLACE5. 在Oracle数据库中,用于查询数据的操作是()。
A. SELECTB. SEARCHC. FINDD. WHERE二、简答题1. 请简述Oracle数据库的特点。
Oracle数据库具有以下特点:- 完整性:通过约束和触发器来保证数据的完整性。
- 可扩展性:支持集群部署和分布式数据库,可以动态扩展数据库的容量。
- 安全性:提供了严格的数据权限管理和用户认证机制,保护数据免受未经授权的访问。
- 可靠性:支持数据备份和恢复功能,保障数据的持久性和可靠性。
- 高性能:采用多线程和缓存技术,提高数据库的读写性能和响应速度。
2. 在Oracle数据库中,什么是事务?事务是指逻辑上的一组操作,这组操作要么全部成功执行,要么全部失败回滚。
事务具有以下特性:- 原子性:事务中的操作要么全部执行成功,要么全部回滚,不会出现部分执行的情况。
- 一致性:事务执行前后,数据库的状态保持一致性,不会破坏数据的完整性。
- 隔离性:事务之间相互独立,每个事务都认为自己是唯一在操作数据库的。
- 持久性:事务一旦提交,其对数据库的修改将永久保存,不会被回滚。
3. 请说明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基本操作练习题使用表:员工表(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. 列出各种工作的最低工资。
Oraclep324查询练习及答案(1) 查询20号部门的所有员工信息;(2) 查询所有工种为CLERK 的员工的员工号、员工名和部门号;(3) 查询奖金COMM 高于工资SAL 的员工信息;(4) 查询奖金高于工资的20%的员工信息;(5) 查询10号部门中工种为MANAGER 和20号部门中工种为CLERK 的员工的信息;(6) 查询所有公众不是MANAGER 和CLERK ,且工资大于或等于2000的员工的详细信息;(7) 查询有奖金的员工的不同工种;(8) 查询所有员工工作与奖金的和;(9) 查询没有奖金或奖金低于100的员工信息;(10)查询各月倒数第二天入职的员工信息;(11)查询工龄大于或等于10年的员工信息;(12)查询员工信息,要求以首字母大写的方式显示所有员工的姓名;(13)查询员工名正好为6个字母的员工信息;(14)查询员工名字中不包含字母S 的员工;(15)查询员工姓名的第二个字母为M 的员工信息;(16)查询所有员工姓名的前三个字符;(17)查询所有员工的姓名,如果包含字母s ,则用S 替换;(18)查询员工的姓名和入职日期,并按入职日期从先到后进行排序;(19)显示所有员工的姓名、工种、工资和京津,按工种降序排序,若工种相同则按工资升序排序;(20)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,若月份相同则按入职的年份排序;(21)查询在2月份入职的所有员工信息;(22)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示;(23)查询至少有一个员工的部门信息;(24)查询工资比SMITH 员工工资高的所有员工信息;(25)查询所有员工的姓名及其直接上级的姓名;(26)查询入职日期早于其上级领导的所有员工信息;(27)查询所有部门及其员工信息,包括那些没有员工的部门;(28)查询所有员工及其部门信息,包括那些还不属于任何部门的员工;(29)查询所有工种为CLERK 的员工的姓名及其部门名称;(30)查询最低工资大于2500的各种工作;(31)查询平均工资低于2000的部门及其员工信息;(32)查询在SALES 部门工作的员工的姓名信息;(33)查询工资高于公司平均工资的所有员工信息;(34)查询与SMITH 员工从事相同工作的所有员工信息;(35)列出工资等于30号部门中某个员工工资的所有员工的姓名和工资;(36)查询工资高于30号部门中工作的所有员工的工资的员工姓名和工资;(37)查询每个部门中的员工数量、平均工资和平均工作年限;(38)查询不同部门的同一种工作;(39)查询各个部门的详细信息以及部门人数、部门平均工资;(40)查询各种工作的最低工资;(41)查询各个部门中不同工种的最高工资;(42)查询10号部门员工及其领导的信息;(43)查询各个部门的人数及平均工资;(44)查询工资为某个部门平均工资的员工信息;(45)查询工资高于本部门平均工资的员工信息;(46)查询工资高于本部门平均工资的员工信息及其部门的平均工资;(47)查询工资高于20号部门某个员工工资的员工的信息;(48)统计各个工种的员工人数与平均工资;(49)统计每个部门中各工种的人数与平均工资;(50)查询工资、奖金与10号部门某员工工资、奖金都相同的员工信息;(51)查询部门人数大于5的部门的员工信息;(52)查询所有员工工资都大于2000的部门的信息;(53)查询所有员工工资都大于2000的部门的信息及其员工的信息;(54)查询所有员工工资都在2000~3000之间的部门的信息;(55)查询所有工资在2000~3000之间的员工所在的部门的员工信息;(56)查询每个员工的领导所在部门的信息;(57)查询人数最多的部门信息;(58)查询30号部门中工资排序前3名的员工信息;(59)查询所有员工中工资排序在5~10名之间的员工信息;(60)查询SMITH 员工及其所有直接、间接下属员工的信息;(61)查询SCOTT 员工及其直接、间接上级员工的信息;(62)以树状结构查询所有员工与领导之间的层次关系;(63)向emp 表中插入一条记录,员工号为1357,名字为oracle ,工资为2050,部门号为20,入职日期为2002年5月10日;(64)向emp 表中插入一条记录,员工名为FAN,号为8000,其他信息与SMITH员工的信息相同;(65)将各个部门员工的工资修改为该员工所在部门平均工资加1000;1、select * from emp where deptno=20;2、select empno,ename,deptno from emp where job=‘CLERK’3、select * from emp where comm>sal;4、select * from emp where comm.>sal*0.25、select * from emp where job=’MANAGER’and deptno=10 or job=’CLERK’and deptno=206、select * from emp where sal>=2000minusselect * from emp where job=’MANAGER’ or job=’CLERK’select * from mep where job!=’MANAGER’ and job!=’CLERK’ and sal>=20007、select distinct job from emp where comm is not null8、select ename,empno sal+nvl(comm.,0) from emp;9、select * from emp where comm is null or comm<100;10、select * from emp where hiredate in (select last_day(hiredate)-1 from emp);11、select empno,ename,hiredate from emp where (sysdate-hiredate)/365>=10;12、select initcap(ename),empno,sal from emp;13、select * from emp where length(ename)=6;14、select * from emp where ename not like ‘%S%’;15、select * from emp where ename like ‘_M%’;16、select substr(ename,1,3) from mep;17、select replace(ename,’s’,’S’) from emp;18、select ename,hiredate from emp order by hiredate19、select ename,job,sal,comm. From emp order by job desc,sal20、select ename,extract(month from hiredate) month,extract(year from hiredate) year from emp order by month,year;select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'mm') month from emp order by month,year21.select * from emp where extract(month from hiredate)=’2’;22. select floor((sysdate-hiredate)/365)||'年'||floor(mod(sysdate-hiredate,365)/30)||'月'||floor(mod(mod(sysdate-hiredate,365),30))||'日' worktimefrom emp23.select dname,deptno,loc from dept where deptno in (select deptno from emp group by deptno having count(*)>1);24.select * from emp where sal>(select sal form emp where ename=’SMITH’);25. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno26. select a.ename,a.hiredate from emp awhere hiredate<(select hiredate from emp b whereb.empno=a.mgr)27.select dept.deptno,dname,ename,empno,sal from dept left join emp on dept.deptno=emp.deptno;28.select empno,ename,sal,emp.deptno,dname from dept right join emp on dept.deptno=emp.deptno;29.select ename,dname fro m emp,dept where job=’CLERK’ and emp.deptno=dept.deptno;30.select job from emp group by job having min(sal)>2500;31.select deptno,empno,ename,sal from emp where deptno in (select deptno from emp group by deptno having avg(sal)<2000);32.select ename from emp,dept where dname=’SALES’ and dept.deptno=emp.deptno;33.select * from emp where sal>(select avg(sal) from emp);34.select * from emp where job=(select job from emp where ename=’SMITH’);35.select ename,sal from emp where sal in (select sal from emp where deptno=30);36.select ename,sal from emp where sal>all(select sal from emp where deptno=30);37.select count(*),avg(sal),avg((sysdate-hiredate)/365) from emp group by deptno;38.select distinct job,deptno from emp;查询同部门同工种员工信息select ename,emp.job,emp.deptno from emp,(select deptno,job from emp group by (deptno,job) having count(*)>1) awhere emp.deptno=a.deptno and emp.job=a.joborder by ename39.select dept.deptno,dname,d.amount,d.avgsal from dept,(select deptno,count(*)amount,avg(sal) avgsal from emp group by deptno) d where dept.deptno=d.deptno;40.select job,min(sal) from emp group by job;41. select deptno,job,max(sal) from emp group by deptno,job42. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno and a.deptno=10;43.select deptno,count(empno),avg(sal) from emp group by deptno;44.select * from emp where sal in (select avg(sal) from emp group by deptno);45.select * from emp e where sal>(select avg(sal) from emp where deptno=e.deptno);46.select ename,empno,sal d.avgsal from emp e,(select empno,avg(sal) avgsal from emp) d where sal>(select avg(sal) from emp where deptno=e.deptno) and d.deptno=e.deptno47.select * from emp where sal>any(select sal from empwhere deptno=20);48.select job,count(empno),avg(sal) from emp group by job;49. select deptno, job,count(empno), avg(sal) from emp group by deptno,job;50. select * from emp where (sal,comm) in (select sal,comm from emp where deptno=10);51. select * from emp where deptno in (select deptno from emp group by deptno having count(empno)>5);52. select deptno,dname,loc from dept where deptno in (select deptno from emp group by deptno having min(sal)>2000);53.select emp.deptno,dname,ename,empno,sal from emp,dept where emp.deptno in(select deptno from emp group by deptno having min(sal)>2000)and emp.deptno=dept.deptno;54. select dname,deptno,loc from deptwhere deptno not in (select deptno from emp where sal<2000 OR SAL>3000)55. select *from emp where deptno in (select deptno from emp where saL BETWEEN 2000 AND 3000)56.select a.deptno,dname,loc from dept a,emp b,emp c where a.deptno=b.deptno andb.mgr=c.empno57.select deptno,dname,loc from dept where deptno in(select deptno from emp group by deptno having count(empno)>=all(select max(count(*))from emp group by deptno));58.select *from emp where deptno=30 and rownum<=3 order by sal;58.select rownum,a.empno,a.sal from (select * from emp order by sal desc) aWhere rownum<=3 and deptno=3059. select rownum,a.empno,a.sal from(select * from emp order by sal desc) a where rownum<=10minusselect rownum,a.empno,a.sal from (select * from emp order by sal desc) awhere rownum<563.insert into emp (empno,ename,sal,deptno,hiredate) values (1357,’oracle’,2050,20,to_date(‘2002-5-10’,’YYYY-MM-DD’));64.insert into emp select8000,’FAN’,job,mgr,hire date,sal,comm.,deptno from emp where ename=’SMITH’;65.update emp set sal=1000+(select avg(sal) from emp e where emp.deptno=e.deptnogroup by deptno);SQL> SELECT EXTRACT(DAY FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) DAY,2 EXTRACT(HOUR FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) HOUR,3 EXTRACT(MINUTE FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) MINUTE,4 NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’) DETAIL5 FROM EMP;原意是给出两个日期,获取两个日期之间的间隔数值,返回形如格式:x年x月x日,类似倒计时工具计时器。
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 数据库增删改查练习50例-答案一、建表--学生表drop table student;create table student (sno varchar2(10,sname varchar2(10,sage date,ssex varchar2(10;insert into student values('01','赵雷',to_date('1990/01/01','yyyy/mm/dd','男';insert into student values('02','钱电',to_date('1990/12/21','yyyy/mm/dd','男';insert into student values('03','孙风',to_date('1990/05/20','yyyy/mm/dd','男';insert into student values('04','李云',to_date('1990/08/06','yyyy/mm/dd','男';insert into student values('05','周梅',to_date('1991/12/01','yyyy/mm/dd','女';insert into student values('06','吴兰',to_date('1992/03/01','yyyy/mm/dd','女';insert into student values('07','郑竹',to_date('1989/07/01','yyyy/mm/dd','女';insert into student values('08','王菊',to_date('1990/01/20','yyyy/mm/dd','女';--课程表drop table course;create table course (cno varchar2(10,cname varchar2(10,tno varchar2(10;insert into course values ('01','语文','02';insert into course values ('02','数学','01';insert into course values ('03','英语','03';--教师表drop table teacher;create table teacher (tno varchar2(10,tnamevarchar2(10;insert into teacher values('01','张三';insert into teacher values('02','李四';insert into teacher values('03','王五';--成绩表drop table sc;create table sc (sno varchar2(10,cno varchar2(10,score number(18,1;insert into sc values('01','01',80.0;insert into sc values('01','02',90.0;insert into sc values('01','03',99.0;insert into sc values('02','01',70.0;insert into scvalues('02','02',60.0;insert into sc values('02','03',80.0;insert into scvalues('03','01',80.0;insert into sc values('03','02',80.0;insert into scvalues('03','03',80.0;insert into sc values('04','01',50.0;insert into scvalues('04','02',30.0;insert into sc values('04','03',20.0;insert into scvalues('05','01',76.0;insert into sc values('05','02',87.0;insert into scvalues('06','01',31.0;insert into sc values('06','03',34.0;insert into scvalues('07','02',89.0;insert into sc values('07','03',98.0;commit;二、查询1.1、查询同时存在"01"课程和"02"课程的情况select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02';1.2、查询必须存在"01"课程,"02"课程可以没有的情况select t.*, s.score_01, s.score_02 from student t inner join (select a.sno, a.score score_01, b.score score_02 from sc a left join (select * from sc where cno = '02' b on (a.sno = b.sno where o = '01' s on (t.sno = s.sno;2.1、查询同时'01'课程比'02'课程分数低的数据select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02' and sc1.score < sc2.score;2.2、查询同时'01'课程比'02'课程分数低或'01'缺考的数据select s.sno, s.sname, s.sage, s.ssex, t.score_01, t.score_02 from student s, (select b.sno, a.score score_01,b.score score_02 from (select * from sc where cno = '01' a, (select * from sc where cno = '02' b where a.sno(+ = b.sno t where s.sno = t.sno and (t.score_01 < t.score_02 ort.score_01 is null;3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩select s.sno, s.sname, t.avg_score avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score >= 60 order by sno t where s.sno = t.sno;4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩4.1、有考试成绩,且小于60分select s.sno, s.sname, t.avg_score avg_score from student s,(select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score < 60 order by sno t where s.sno = t.sno;4.2、包括没有考试成绩的数据select g.* from (select s.sno, s.sname,nvl(t.avg_score, 0 avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno order by sno t where s.sno = t.sno(+ g where g.avg_score < 60;5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩5.1、查询所有成绩的(不含缺考的)。