第1章 简单查询
1. 在 emp
表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。
1
| SELECT ename AS 姓名, empno AS 部门编号, sal AS 薪水 FROM emp;
|
2. 在 emp
表中查询出薪水大于 1500 的记录,并且按照薪水的降序排列。
1
| SELECT * FROM emp WHERE sal > 1500 ORDER BY sal DESC;
|
3. 在 emp
表中查询出 comm
字段为空值的记录。
1
| SELECT * FROM emp WHERE comm IS NULL;
|
4. 查询出 emp
表中含有几个部门的记录。(用 DISTINCT
去除重复记录)
1
| SELECT DISTINCT deptno FROM emp;
|
5. 在 emp
表中查询出部门编号为 10 或 20 的记录(请分别使用 OR
和 IN
关键字)。
1 2
| SELECT * FROM emp WHERE deptno IN (10, 20); SELECT * FROM emp WHERE deptno = 10 OR deptno = 20;
|
6. 在 emp
表中查询出姓名的第二个字母为 A 的记录。
1
| SELECT * FROM emp WHERE ename LIKE '_A%';
|
7. 查询出 emp
表中总共有多少条记录。
1
| SELECT COUNT(*) FROM emp;
|
8. 查询 emp
表中 1981 年雇用的所有员工,或者是 1987 年 5 月雇用的员工。
1 2
| SELECT * FROM emp WHERE TO_CHAR(hiredate, 'YYYY') = '1981' OR (TO_CHAR(hiredate, 'YYYY') = '1987' AND TO_CHAR(hiredate, 'MM') = '05');
|
9. 选择部门 30 的所有员工。
1
| SELECT * FROM emp WHERE deptno = 30;
|
10. 列出所有办事员(CLERK
)的姓名、编号和部门编号。
1
| SELECT ename, empno, deptno FROM emp WHERE job = 'CLERK';
|
11. 找出佣金高于薪金的所有员工。
1
| SELECT * FROM emp WHERE comm > sal;
|
12. 找出佣金高于薪金 30% 的所有员工。
1
| SELECT * FROM emp WHERE comm > sal * 0.3;
|
13. 找出部门 10 中所有经理(MANAGER
)和部门 20 中所有办事员(CLERK
)的详细资料。
1 2
| SELECT * FROM emp WHERE (deptno = 10 AND job = 'MANAGER') OR (deptno = 20 AND job = 'CLERK');
|
14. 找出部门 10 中所有经理(MANAGER
),部门 20 中所有办事员(CLERK
),既不是经理又不是办事员但其薪金大于或等于 2000 的所有员工的详细资料。
1 2 3
| SELECT * FROM emp WHERE (deptno = 10 AND job = 'MANAGER') OR (deptno = 20 AND job = 'CLERK') OR (job NOT IN ('MANAGER', 'CLERK') AND sal >= 2000);
|
15. 找出收取佣金的员工的不同的工作。
1
| SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL AND comm > 0;
|
16. 找出不收取佣金或收取佣金少于 100 的员工。
1
| SELECT * FROM emp WHERE comm IS NULL OR comm < 100;
|
17. 显示姓名不带有 R 的员工的姓名。
1
| SELECT * FROM emp WHERE ename NOT LIKE '%R%';
|
18. 显示员工的详细资料,按姓名排序。
1
| SELECT * FROM emp ORDER BY ename;
|
19. 显示员工的姓名和受雇日期,根据服务年限,将最老的员工排在最前面。
1
| SELECT ename, hiredate FROM emp ORDER BY hiredate ASC;
|
20. 显示所有员工的姓名、工作和薪金,按工作降序排序,若工作相同则按薪金排序。
1
| SELECT ename, job, sal FROM emp ORDER BY job DESC, sal;
|
21. 显示姓名字段的任何位置包含 A 的所有员工的姓名。
1
| SELECT * FROM emp WHERE ename LIKE '%A%';
|
22. 找出各月倒数第三天受雇的所有员工。
1
| SELECT * FROM emp WHERE hiredate = LAST_DAY(hiredate) - 2;
|
23. 找出早于 28 年前受雇的所有员工。
1
| SELECT * FROM emp WHERE MONTHS_BETWEEN(SYSDATE, hiredate) / 12 > 28;
|
24. 以首字大写的方式显示所有员工的姓名。
1
| SELECT INITCAP(ename) FROM emp;
|
25. 显示员工姓名正好为 5 个字符的员工。
1
| SELECT * FROM emp WHERE LENGTH(ename) = 5;
|
26. 显示所有员工姓名的前三个字符。
1
| SELECT SUBSTR(ename, 1, 3) FROM emp;
|
27. 显示所有员工的姓名,用 a 替换 A。
1
| SELECT REPLACE(ename, 'A', 'a') FROM emp;
|
28. 显示满 10 年服务年限的员工的姓名和受雇日期。
1
| SELECT ename, hiredate FROM emp WHERE MONTHS_BETWEEN(SYSDATE, hiredate) / 12 >= 10;
|
29. 显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同,则将最早年份的员工排在最前面。
1 2 3
| SELECT ename, TO_CHAR(hiredate, 'YYYY') AS 年份, TO_CHAR(hiredate, 'MM') AS 月份 FROM emp ORDER BY TO_CHAR(hiredate, 'MM'), TO_CHAR(hiredate, 'YYYY');
|
30. 显示所有员工的日薪金,忽略余数。每个月的天数都以 30 天计。
1
| SELECT ROUND(sal / 30) FROM emp;
|
31. 找出在(任何年份)2 月受聘的所有员工的姓名,对于每个员工,显示其加入公司的天数。
1 2 3
| SELECT ename, SYSDATE - hiredate AS 加入天数 FROM emp WHERE TO_CHAR(hiredate, 'MM') = '02';
|