Peripateticism

Yuens' blog

View the Project on GitHub

header

Oracle数据库思考题:SQL基本命令、简单查询、限定查询

内容参考《李兴华Oracle数据库》的思考题A部分(包含:SQL基本命令、简单查询、限定查询,链接见文末参考),本节主要包括:[toc]

1. 思考题

1.1 选择部门30中的所有员工

SELECT *
FROM emp
WHERE deptno=30;

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

SELECT ename, empno, deptno
FROM emp
WHERE job=’CLERK’;

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

需要乘以0.6:

SELECT *
FROM emp
WHERE comm>sal*0.6;

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

SELECT *
FROM emp
WHERE (deptno=10 AND job=’MANAGER’) OR
      (deptno=20 AND job=’CLERK’);

1.5 找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理也不是办事员并且薪金大于等于2000的所有员工的详细资料

SELECT *
FROM emp
WHERE (deptno=10 AND jpb=’MANAGER’) OR
      (deptno=20 AND job=’CLERK’) OR
      (job NOT IN (‘MANAGER’,  ‘CLERK’) AND sal>=2000);

1.6 找出收取佣金的员工的不同工作。

佣金上存在NULL数据,所以现在需要使用IS NOT NULL来处理领取佣金,而且需要使用DISTINCT来消除重复行。

SELECT DISTINCT job
FROM emp
WHERE comm IS NOT NULL;

1.7 找出不收取佣金或收取佣金低于100的员工。

SELECT *
FROM emp
WHERE comm IS NULL OR comm<100;

1.8 显示不带有R的员工姓名

SELECT ename
FROM emp
WHERE ename NOT LIKE ‘%R%’;

1.9 显示姓名字段的任何位置包含“A”的所有员工的姓名,显示结果按照基本工资由高到低排序,如果基本工资相同,按照雇佣年限从早到晚排序

SELECT *
FROM emp
WHERE ename LIKE ‘%A%’
ORDER BY sal DESC, hiredate ASC, job;

最后job省去默认的ASC,对职位排。

2. 总结

2.1 Oracle数据库之中的三个主要用户:

2.2 SQLPlus的几个基本命令;

2.3 已给出的SQL语法

SELECT [DISTINCT] * | 列 [别名], 列 [别名],… 步骤三:控制要显示的数据列
FROM 表名称 [别名] 步骤一:确定数据源
[WHERE 条件(s)] 步骤二:根据判断条件选择参与的数据行
[ORDER BY 字段 [ASC|DESC], 字段 [ASC|DESC], ..] 步骤四:数据排序

清楚每个子句的作用:

  1. FROM:确定数据来源;
  2. WHERE:进行数据行的筛选;
  3. SELECT:进行数据列的筛选;
  4. ORDER BY:进行最终数据的排序。

ORDER BY子句永远写在最后一行。

3. 参考