首页  >  文章  >  电脑教程  >  练习ORACLE数据库的题目

练习ORACLE数据库的题目

PHPz
PHPz转载
2024-01-23 21:48:05618浏览

练习ORACLE数据库的题目

练习ORACLE数据库的题目

使用scott/tiger用户下的emp表完成下列练习,表的结构说明如下

emp员工表 字段内容如下:

empno 员工号

ename 员工姓名

job 工作

mgr 上级编号

hiredate 受雇日期

sal 薪金

comm 佣金

deptno 部门编号

1.选择部门30中的所有员工.

2.列出所有办事员(CLERK)的姓名,编号和部门编号.

3.找出佣金高于薪金的员工.

4.找出佣金高于薪金的60%的员工.

5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.

6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.

7.找出收取佣金的员工的不同工作.

8.找出不收取佣金或收取的佣金低于100的员工.

9.找出各月倒数第3天受雇的所有员工.

10.找出早于12年前受雇的员工.

11.以首字母大写的方式显示所有员工的姓名.

12.显示正好为5个字符的员工的姓名.

13.显示不带有"R"的员工的姓名.

14.显示所有员工姓名的前三个字符.

15.显示所有员工的姓名,用a替换所有"A"

16.显示满10年服务年限的员工的姓名和受雇日期.

17.显示员工的详细资料,按姓名排序.

18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.

19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.

20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.

21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.

22.找出在(任何年份的)2月受聘的所有员工。

23.对于每个员工,显示其加入公司的天数.

24.显示姓名字段的任何位置包含"A"的所有员工的姓名.

25.以年月日的方式显示所有员工的服务年限. (大概)

oracle题目

(1) select deptno from dept where depptno in (select deptno from em);

(2)select empno,ename,sal from em where sal>(select sal from em where ename = 'SMITH');

(3)SELECT e.ename,d.dname from em e,dept d where e.deptno=d.deptno and e.job = 'CLERK';

(4)select empno,ename from em where job in (select job from em where ename = 'SCOTT') ;

(5)select job,min(sal) from em group by job;

(6)select d.dname ,min(e.sal) from dept d,em e

where d.deptno=e.deptno and e.job ='MANAGER' group by d.dname;

Oracle 11G SQL练习作业题

7.select 员工名,工资 from 表 where 工资8.select 员工名,工资 from 表 where 工资>avg(工资) order by 职位;

9.例:t1中列n的数为[2,3];t2中列n的数为[1,2,3,4]

select * from t2 where n >any(select n from t1);结果:3,4.

注:查询表t2中列n的数中有哪些数是比表t1中列n的最大的数[包含max的]。

select * from t2 where n = any(select n from t1);结果:2,3.

select * from t2 where n 10.select * from t2 where n >all(select n from t1);结果:4.

select * from t2 where n 12.SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2;合并table_name1、table_name2两个表,没有重复的列。

SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2;将table_name1、table_name2两个表的所有数据连接,有重复的。

一道oracle存储过程的题目解

CREATE TABLE SC(

SNO INT,

CNO varchar(10),

GRADE INT

);

INSERT INTO SC VALUES(95001, '数学', 75);

INSERT INTO SC VALUES(95001, '语文', 92);

INSERT INTO SC VALUES(95002, '英语', 64);

INSERT INTO SC VALUES(95002, '英语', 77);

INSERT INTO SC VALUES(95003, '数学', 85);

CREATE TABLE SC_TOTAL(

SNO INT PRIMARY KEY,

"数学" number(5,2),

"语文" number(5,2),

"英语" number(5,2),

"平均分" number(5,2)

);

DECLARE

v_row_count INT;

BEGIN

FOR sc_rec IN (SELECT * FROM SC)

LOOP

-- 判断数据有没有

SELECT COUNT(*) INTO v_row_count

FROM SC_TOTAL

WHERE SNO = sc_rec.SNO;

IF v_row_count = 0 THEN

-- 数据不存在. 先插入.

INSERT INTO SC_TOTAL(SNO) VALUES (sc_rec.SNO);

END IF;

-- 根据课程, 更新 具体的列.

IF sc_rec.CNO = '数学' THEN

UPDATE SC_TOTAL SET "数学" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;

ELSIF sc_rec.CNO = '语文' THEN

UPDATE SC_TOTAL SET "语文" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;

ELSIF sc_rec.CNO = '英语' THEN

UPDATE SC_TOTAL SET "英语" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;

END IF;

-- 计算平均分.

UPDATE SC_TOTAL

SET "平均分" = (NVL("数学",0) + NVL("语文",0) + NVL("英语", 0))

/ (NVL2("数学", 1,0) + NVL2("语文", 1, 0) + NVL2("英语",1, 0))

WHERE SNO = sc_rec.SNO;

END LOOP;

END;

/

-- 数据核对.

SQL>SELECT * FROM SC_TOTAL;

SNO 数学 语文 英语 平均分

---------- ---------- ---------- ---------- ----------

95001 75 92 83.5

95002 77 77

95003 85 85

以上是练习ORACLE数据库的题目的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:docexcel.net。如有侵权,请联系admin@php.cn删除