【OracleDB】 04 过滤 & 排序
WHERE 子句 过滤条件
SELECT 通配符* |{去除重复 [DISTINCT] 列column| 表达式 expression 别名[alias],...} FROM 数据表名table [WHERE 过滤条件condition(s)];
返回在 90号部门工作的所有员工的信息
SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;
字符和日期的过滤条件
- 1、字符和日期要包含在单引号中。
- 2、字符大小写敏感,日期格式敏感。
- 3、默认的日期格式是 DD-MON月-RR。
查询名字为XXX的员工 的名字、工号、部门号
SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Whalen';
查询转正日期为XXX时间的员工的 姓名 转正日期 部门号
SELECT last_name, hire_date, department_id FROM employees WHERE hire_date = '7-6月-1994'
比较运算符:
- 大于 >、小于 <、
- 等于 =、不等于 != [<>]
- 大于等于 >=、小于等于 <=、
- 在值1和值2之间,包括这两个值 BETWEEN value1 AND value2
- 在这个值的列表范围之内 IN (v1,v2,v3,v4, ...)
- 模糊查询 LIKE
- 判断是否为空值 IS NULL
查询工资小于3000的员工
SELECT last_name, salary FROM employees WHERE salary <= 3000;
查询工资在2500 - 3000之间的员工
SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500;
查询管理者ID为 101,102,103的员工信息
SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);
查询姓为S开头的的姓氏
通配符%表示0到若干个字符个数
通配符_表示固定的一个字符个数
SELECT first_name FROM employees WHERE first_name LIKE 'S%';
查询名字第二个字符是o的名字
SELECT last_name FROM employees WHERE last_name LIKE '_o%'
字符转义 字符逃逸 Escape
- 回避特殊符号:使用转义符。
例如:
- 将 [%] 转为 [\%]、
- [ _ ] 转为 [ \_ ],然后再加上 [ ESCAPE ‘\’] 即可
查询工号像【IT_】的工号
SELECT job_id FROM jobs WHERE job_id LIKE ‘IT\_%‘ escape ‘\‘;
因为斜杠带有特殊含义所以要使用ESCAPE关键字

空值判断 IS NULL
查询管理者ID为空的,名字和管理ID
SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL;
逻辑运算
- 且、并、AND
- 或、OR
- 非、NOT
过滤两个以上的表达式都为真的条件
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000 AND job_id LIKE '%MAN%';
过滤两个以上的表达式只要其中一个满足的条件
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%';
对过滤的表达式取反
SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
Oracle所有的运算符的优先级关系顺序:
- 1、括号 > 算术运算
- 2、连接符 > 比较符
- 3、IS [ NOT ] NULL > LIKE > [ NOT ] IN
- 4、[ NOT BETWEEN ]
- 5、NOT > AND > OR
【括号是最高优先级,可以改变上述的运算优先关系】
【多使用括号,明确的表达你想过滤的条件,保证语句的执行正确性】
排序 Sort
使用ORDER BY子句进行排序
分为升序【从小到大】和降序【从大到小】
- 升 ASC【Ascend】
- 降 DESC 【Descend】
ORDER BY 子句在SELECT语句的结尾。
查询员工表的名字、工号、部门号、转正日期
并按转正日期升序排序
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;
在不显示的书写升序或降序时,默认是升序的意思

反之降序
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC ;
可以配合别名排序
SELECT employee_id, last_name, salary*12 annsal FROM employees ORDER BY annsal;
可以按多个列排序
SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;
可以使用不在查询列表中,但是要在FROM的表中的列
【省略】
总结:
- WHERE子句用来过滤条件
- 可以使用上述的所有运算符
- 可以嵌套,复用运算符,注意要使用括号明确你的SQL语义
- 对查询的结果可以使用ORDER BY 进行排序,不写顺序要求默认升序排序
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)] [ORDER BY {column, expr, alias} [ASC|DESC]];

浙公网安备 33010602011771号