oracle 数据库 练习题2

时间:2023-02-23 17:12:39

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

emp员工表 字段内容如下:

empno 员工号

ename 员工姓名

job 工作

mgr 上级编号

hiredate 受雇日期

sal 薪金

comm 佣金

deptno 部门编号

-- 选择部门30中的所有员工.
SELECT *
FROM EMP
WHERE DEPTNO=30;
-- 列出所有办事员(CLERK)的姓名,编号和部门编号.
SELECT ENAME,MGR,DEPTNO
FROM EMP
WHERE "JOB" LIKE 'CLERK';
-- 找出佣金高于薪金的员工.
SELECT EMPNO,ENAME
FROM EMP
WHERE COMM>SAL;
-- 找出佣金高于薪金的60%的员工.
SELECT EMPNO,ENAME
FROM EMP
WHERE COMM>SAL*0.6;
-- 找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.
SELECT *
FROM EMP
WHERE (DEPTNO=10 AND "JOB"='MANAGER') OR (DEPTNO=20 AND "JOB"='CLERK');
-- 找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.
SELECT *
FROM EMP
WHERE (DEPTNO=10 AND "JOB"='MANAGER') OR (DEPTNO=20 AND "JOB"='CLERK') OR ("JOB"<>'MANAGER' AND "JOB"<>'CLERK' AND SAL>=2000);
-- 找出收取佣金的员工的不同工作.
SELECT DISTINCT JOB
FROM EMP
WHERE COMM IS NOT NULL
-- 找出不收取佣金或收取的佣金低于100的员工.
SELECT EMPNO,ENAME,"JOB"
FROM EMP
WHERE COMM IS NOT NULL AND COMM<100;
-- 找出各月倒数第3天受雇的所有员工.
SELECT EMPNO,ENAME
FROM EMP
WHERE HIREDATE=(LAST_DAY(HIREDATE)+(INTERVAL '-2' DAY));


-- 找出早于12年前受雇的员工.
SELECT EMPNO,ENAME
FROM EMP
WHERE HIREDATE<(trunc(sysdate)+(INTERVAL '-12' YEAR));


-- 以首字母大写的方式显示所有员工的姓名.
SELECT "INITCAP"(ENAME)
FROM EMP


-- 显示正好为5个字符的员工的姓名.
SELECT ENAME
FROM EMP
WHERE "LENGTH"(ENAME)=5;


-- 显示不带有"R"的员工的姓名.
SELECT ENAME
FROM EMP
WHERE ENAME NOT LIKE '%R%';


-- 显示所有员工姓名的前三个字符.
SELECT substr(ENAME,1,3)
FROM EMP;


-- 显示所有员工的姓名,用a替换所有"A"
SELECT TRANSLATE(ENAME,'A','a')
FROM EMP;


-- 显示满10年服务年限的员工的姓名和受雇日期.
SELECT HIREDATE,ENAME
FROM EMP
WHERE HIREDATE<=(trunc(sysdate)+(INTERVAL '-10' YEAR));


-- 显示员工的详细资料,按姓名排序.
SELECT *
FROM EMP
ORDER BY ENAME ASC;


-- 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.
SELECT ENAME,HIREDATE
FROM EMP
ORDER BY HIREDATE ASC;


-- 显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.
SELECT ENAME,"JOB",SAL
FROM EMP
ORDER BY JOB DESC ,SAL;


-- 显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.
SELECT ENAME,extract(YEAR from HIREDATE) YEAR,extract(MONTH from HIREDATE) MONTH
FROM EMP
ORDER BY MONTH ASC,YEAR;


-- 显示在一个月为30天的情况所有员工的日薪金,忽略余数.
SELECT TRUNC(SAL/30)
FROM EMP;


-- 找出在(任何年份的)2月受聘的所有员工。
SELECT ENAME,EMPNO
FROM EMP
WHERE extract(MONTH from HIREDATE)=2;


-- 对于每个员工,显示其加入公司的天数.
SELECT ROUND(sysdate-HIREDATE)
FROM EMP;


--显示姓名字段的任何位置包含"A"的所有员工的姓名.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE '%A%';


总结:因为是很久之前学过的是SQL数据库,到现在还是有点生疏了,很多的函数和知识有点遗忘了,还是要查看的。