使用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.以年月日的方式显示所有员工的服务年限. (大概)
(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;
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两个表的所有数据连接,有重复的。
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中文网其他相关文章!