【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]];

 

posted @ 2020-05-14 17:39  emdzz  阅读(176)  评论(0)    收藏  举报