– 使用where语句,比较不同类型数据 : 数值型、字符型、日期型
比较操作符
比较数值型值
数值型数据比较时可不加单引号-- 1、查询所有部门编号为10的员工信息 select * from emp where deptno = 10; -- 2、查询所有部门编号不在10的员工信息 select * from emp where deptno <> 10;
比较字符型数据,加单引号”,区分大小写
-- 1、查询职位为'CLERk'的所有员工信息 select * from emp where job = 'CLERK';
比较日期型数据
注:比较时应按照DD-MON-RR格式, 即 1-1月-2018 进行日期型数据比较
在第四章有介绍日期格式,也有介绍数据转换函数-- 1、查询所有在1981年后入职的员工信息 select * from emp where hiredate > '31-12月-1981';
– 特殊比较运算符
使用between … and … 运算符判断要比较的值是否在某个范围内(包括边界值)
-- 1、查询薪水在1000到2000之间的所有员工信息 select * from emp where sal between 1000 and 2000; -- 2、查询入职日期在1981年之后,1987年之前的员工信息 select * from emp where hiredate between '1-1月-82' and '31-12月-86';--此处说明,81年后不能包含81年12月31日, 所以特别注意between and 保留边界值这一特性
IN(集合列表),判断要比较的值是否和集合中的任何一个值相等
只要判断值与in中的任意一个数据相等即为真-- 1、查询部门编号在10或20的所有员工信息 select * from emp where deptno in (10, 20);
like 模糊查询,判断要比较的值是否满足部分匹配
-- % 任意字符个数 -- _ 一个字符 -- 1、查询所有名字以S开头的员工信息 select * from emp where ename like 'S%'; -- 2、查询所有名字以S结尾的员工信息 select * from emp where ename like '%S'; -- 3、查询所有名字包含S的员工信息 select * from emp where ename like '%S%'; -- 4、查询所有名字第二个字母为A的员工信息 select * from emp where ename like '_A%';
插入一条数据到表格中(此为验证特殊字符查询添加,可先不管,直接复制执行,后面数据操作时会讲到)
insert into emp values (8002, 'Jack_Ma', 'MANAGER', 7830, sysdate, 10000, 10000, 10);
特殊字符查找 escape 标示符
-- 5、查询所有名字中以Jack_开头的员工信息 select * from emp where ename like 'Jack@_%' escape '@';
is null 判断是否为空值(不是0)
-- 1、查询奖金为空的员工信息 select * from emp where comm is null;
逻辑运算符
逻辑表达式的结果为TRUE(真),FALSE(假),NULL(空)
-- 逻辑与(and)
-- 必须满足全部条件
select ename,empno,sal,job
from emp
where sal > 1100
and job = 'CLERK';
-- 逻辑或(or)
-- 只需满足其中一个条件
select ename,empno,sal,job
from emp
where sal > 1100
or job = 'CLERK';
-- 逻辑非(not)
-- 不满足条件
select ename,empno,sal,job
from emp
where mgr is not null;
-- 逻辑运算符not与特殊比较运算符一起使用
select * from emp where deptno not in (10, 20);
select * from emp where sal not between 1000 and 3000;
select * from emp where ename not like '%A%';
select * from emp where comm is not null;
--注意not在is null中间
运算符优先级
括号’()’优先于其他操作符
– 排序order by
order by 子句必须写在select语句的最后
语法:
select [distinct] { * | 名 列名 |式 表达式 [ 别名][,...]}
from 表名
[where 条件]
[order by { 列名| 表达式| 列别名| 列序号} [asc|desc],…];
排序规则(以升序为例)
1. 数字升序排列小值在前,大值在后。即按照数字大小顺序由
小到大排列。
2. 日期升序排列相对较早的日期在前,较晚的日期在后。例
如:’01-SEP-06’在’01-SEP-07’前。
3. 字符升序排列按照字母由小到大的顺序排列。即由A-Z排列;
中文升序按照字典顺序排列。
4. 空值在升序排列中排在最后,在降序排列中排在最开始。
参与排序的多列都可以指定升序或者降序
ORDER BY子句中可以写没在SELECT列表中出现的列
排序分类
-- 按列名排序 select ename,sal from emp order by sal; -- 按列别名排序 select ename,sal 薪资 from emp order by 薪资; -- 按列数值排序 select * from emp order by 1;(数字表示第几列,需注意,列数要<=总列数) -- 升序asc(排序时默认排升序) select ename,sal from emp order by sal asc; 与 select ename,sal from emp order by sal; 一样 -- 降序desc select ename,sal from emp order by sal desc;