简单查询

第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 的记录(请分别使用 ORIN 关键字)。

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';

简单查询
https://blog.pangcy.cn/2018/10/01/数据库相关/Oracle/SQL 练习/简单查询/
作者
子洋
发布于
2018年10月1日
许可协议