Oracle笔记03——Oracle操作符和运算符
一、选择限定数据行
语法:
SELECT [DISTINCT] {* | 列名...} FROM 表名 WHERE 条件表达式;
二、比较操作符
(1)=:等于
(2)>:大于
(3)>=:大于或等于
(4)<:小于
(5)<=:小于或等于
(6)<>:不等于
三、使用WHERE字句
1.比较数值型数据
2.比较字符类型数据
注意:
(1)使用单引号‘ ’括起来
(2)区分大小写
3.比较日期类型数据
注意:
(1)使用单引号' '括起来
(2)默认日期格式为:DD-MON-RR
四、特殊比较运算符
(1)BETWEEN...AND...
判断要比较的值是否在某个范围内
(2)IN(集合列表)
判断要比较的值是否和集合列表中的任何一个值相等
(3)LIKE
判断要比较的值是否满足部分匹配
其中,%:匹配零个或多个字符;_:匹配一个任意的字符;
注意:当需要查询的字段里面包含"_"时,可以这样写:
SELECT 字段1,字段2,字段3... FROM 表名 WHERE 字段 LIKE '@_' ESCAPE '@';
(4)IS NULL
判断要比较的值是否为空值
五、逻辑运算符
(1)AND
要求两个都为真时,结果才为真
(2)OR
只要有一个为真,结果就为真
(3)NOT
结果取反
注意:NOT运算符可以和BETWEEN...AND...、IN、LIKE、IS NULL一起使用
六、逻辑运算符的优先级
优先级 | 运算分类 | 运算符举例 |
1 | 算术运算符 | +,-,*,\ |
2 | 连接运算符 | || |
3 | 比较运算符 | <,>,<=,>=,=,<> |
4 | 特殊比较运算符 | BETWEEN...AND...,IN,LIKE,IS NULL |
5 | 逻辑非 | NOT |
6 | 逻辑与 | AND |
7 | 逻辑或 | OR |
七、ORDER BY
1.语法:
SELECT [DISTINCT] {* | 列名...} FROM 表名 WHERE 条件 ORDER BY {[列名...] | [列别名...] | [结果集列序号...] } [ASC(升序) | DESC(降序)];
2.排序规则(以升序为例):
(1)数值类型:数字升序排列,小值在前,大值在后。
(2)日期类型:日期升序排列,较早的日期在前,较后的日期在后。
(3)字符类型:字符升序排列,字母由A-Z排列,中文按照字典顺序排列。
(4)空值类型:空值升序排列,排列在最后。
3.注意:
不推荐按照结果集序列排序
八、练习
--一、普通比较运算符 --1.查询部门编号为10的员工信息 SELECT * FROM emp WHERE deptno = 10;--比较数值型数据 --2.查询职位为“SALESMAN”的职工信息 SELECT * FROM emp WHERE job = 'SALESMAN';--比较字符类型数据 SELECT * FROM emp WHERE job = 'salesman';--注意:1.使用单引号‘ ’括起来 2.区分大小写 --3.查询入职日期为“1980/12/17”的员工信息 SELECT * FROM emp WHERE hiredate = '17-12月-80';--比较日期类型数据,注意:1.使用单引号' '括起来 2.默认日期格式为:DD-MON-RR --4.查询入职日期不为“1980/12/17”的员工信息 SELECT * FROM emp WHERE hiredate <> '17-12月-80'; --二、特殊比较运算符 --1.查询薪资在800-1000之间的员工信息(BETWEEN...AND..运算符) SELECT * FROM emp WHERE sal BETWEEN 800 AND 1000;--包括区间值 --相当于 SELECT * FROM emp WHERE sal >= 800 and sal <= 1000; --2.查询82年入职的员工信息 SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-82' AND '31-12月-82';--BETWEEN...AND... --3.查询部门编号为10或者30的员工信息 SELECT * FROM emp WHERE deptno IN(10,30);--IN --4.查询员工姓名以“A”开头的员工信息 SELECT * FROM emp WHERE ename LIKE 'A%';--LIKE --5.查询员工姓名以“S”结尾的员工信息 SELECT * FROM emp WHERE ename LIKE '%S';--LIKE --6.查询员工姓名第三个字符为“A”的员工信息 SELECT * FROM emp WHERE ename LIKE '__A%';--LIKE --7.查询员工姓名以“AB_”开头的员工信息 SELECT * FROM emp WHERE ename LIKE 'AB@_%' ESCAPE '@';--LIKE --8.查询没有奖金的员工信息 SELECT * FROM emp WHERE comm IS NULL;--IS NULL --三、逻辑运算符 --1.查询职位为CLERK,并且薪水大于1000的员工信息 SELECT * FROM emp WHERE job = 'CLERK' AND sal > 1000;--AND --2.查询职位为CLERK,或者薪水大于1000的员工信息 SELECT * FROM emp WHERE job = 'CLERK' OR sal > 1000;--OR --3.查询部门编号不在10或者30的员工信息 SELECT * FROM emp WHERE deptno NOT IN(10,30);--NOT --4.查询奖金不为空的员工信息 SELECT * FROM emp WHERE comm IS NOT NULL;--NOT --四、逻辑运算符的优先级 --1.查询职位为CLERK或者MANAGER,同时薪水大于1000的员工信息 SELECT * FROM emp WHERE job = 'CLERK' OR job = 'MANAGER' AND sal > 1000;--不能满足题意;此处先判断AND,再判断OR,也就是:查询职位为“MANAGER”且薪水大于1000,或者职位为“CLERK”的员工信息 SELECT * FROM emp WHERE (job = 'CLERK' OR job = 'MANAGER') AND sal > 1000; --五、ORDER BY --1.查询所有员工信息,并按薪水的升序排序 SELECT * FROM emp ORDER BY sal;--默认为升序ASC,数值类型 --2.查询所有员工信息,并按入职日期降序排序 SELECT * FROM emp ORDER BY hiredate DESC;--日期类型 --3.查询所有员工信息,并按入职日期降序和工资升序排列 SELECT * FROM emp ORDER BY hiredate DESC,sal ASC;--多列排序 --4.查询员工表中的员工姓名、部门编号、薪水、年薪(薪水*12),并按年薪降序排序 SELECT ename,deptno,sal,sal*12 FROM emp ORDER BY sal*12; --也可以写成: SELECT ename,deptno,sal,sal*12 AS 年薪 FROM emp ORDER BY 年薪;--按列别名排序 --5.查询所有员工信息,并按第七列降序排序 SELECT * FROM emp ORDER BY 7;--按结果集列序号排序,空值类型