条件查询
查找一个特定条件的表,Oracle提供了WHERE子句来限制查询条件。
WHERE子句
语法
select 列名1,列名2,....from 数据源 where 条件;
查询 列名1,列名2,....从 数据源 什么 条件;
关键字
WHERE 条件
示例
select ename from emp where job = ‘CLERK‘; --查找job为CLERK的员工
逻辑运算符
内容:
> 大于 < 小于 = 等于 >= 大于或等于 <= 小于或等于 != <> --后面两个都为不等于
示例
select * from emp where sal > 2000;
select * from emp where 1=0; --恒不成立表达式 条件恒不为真,查询无结果
select * from emp where 1=1; --恒成立表达式 条件为恒为真,查询有结果,相当于运行select * from emp;
注意
null(空值)不参与运算
select * from emp;
select * from emp where comm > 0; --如果有空值(null值),空值不参与运算
select * from emp where comm !=null; --没有数据
--判断是否为空值
is / is not
select * from emp where comm is not null; --查询非空数据
select * from emp where comm is null; --查询null值的数据
算数运算符
+ - * /
-- 15.每名员工的年终奖是2000,请显示基本工资在2000元以上的员工的月工资,年总工资(12月工资+年终奖)
select sal "月工资", sal * 12 + 2000 "年总工资" from emp where sal > 2000;
布尔连接符
and/or
and -- 并且 两者 都为真 结果为真
or -- 或者 其中 有一个为真 结果为真
--找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK)
select * from emp where job = ‘MANAGER‘and deptno = 10 or job = ‘CLERK‘ and deptno = 20;
非相关条件
条件与查询语句不相关
select * from emp where 1=1; --恒成立 查询条件恒成立 , 全部查询 , 与条件无关
select * from emp where 1=0; --恒不成立 查询条件恒不成立, 查询无结果 ,与 查询语句无关连
范围查询
between ...... and ......
语法
select column1,column2,... from table_name where column1 between value1 and value2;查询 列名1,列名2,... 从 数据表 什么 条件 为 从value1到value2之间
示例
--从emp表中查询出工资为1000到2000的员工信息
select * from emp where sal between 1000 and 2000;
select * from emp where sal >= 1000 and sal <= 2000; --与between...and...等同
注意
--1、VALUE1 < VALUE2--2、包含边界值
in / not in 包含查询
语法
select colum1,colum2,... from table_name where colum1 in/not in(集合)
示例
--查询emp表中部门10和20的员工信息
select * from emp where deptno in(10,20);
select * from emp where deptno = 10 or deptno = 20; --与in等同
--查询emp表中部门编号不为10和20的员工信息
select * from emp where deptno not in(10,20);
select * from emp where deptno != 10 and deptno != 20; --与not in等同
注意
1、集合:一组有着相同属性(相同数据类型)的数据
2、集合面向特定的字段
3、集合中的数据类型一定要统一
4、任何一个字段和一个空值做任何比较时得到的都是空值(或者说都不成立)
5、COLUMN1 IN (VALUE1, VALUE2) 等同于 COLUMN1 = VALUE1 OR COLUMN1 = VALUE2;
6、COLUMN1 NOT IN (VALUE1,VALUE2) 等同于 COLUMN1 <> VALUE1 AND COLUMN1 <> VALUE2;
7、结合5.和6. :IN (集合) 集合中有空值是会被忽略,将符合非空值条件的数据取出NOT IN (集合) 集合中有空值时会导致结果中没有数据取出
any / all
语法
select column1,column2,... from table_name where column1 < any/all(集合);
any(集合): 集合的 任意一个元素 满足条件即可 与集合内元素比较结果 只要一个为true ,就返回数据行
all(集合):集合的 所有元素必需都 满足条件 与集合内元素比较结果 都为true ,就返回数据行
示例
--查询emp表中工资有比1000,2000,3000小的员工信息
select * from emp where sal < any(1000,2000,3000);
/*
any 满足任意条件即可。
即:
当sal < any(集合)时 , sal 小于集合中 最大值就能查询数据
当sal > any(集合)时 , sal 大于集合中 最小值就能查询数据
*/
--查询emp表中工资比1000,2000,3000都小的员工信息
select * from emp where sal < all(1000,2000,3000);
/*
all 满足集合中所有条件
即:
当 sal < all(集合)时, sal 小于集合中 最小值才能查到数据
当 sal > all(集合)时, sal 大于集合中 最大值才能查到数据
*/
模糊查询
在WHERE子句中使用LIKE关键字查询数据的方式也称为字符串模式匹配或字符串模糊查询。LIKE关键字需要使用通配符在字符串内查找指定的模式。
通配符:
- ‘ _ ‘ : 下滑线表示任意一个字符 有且只有一个。
- ‘ % ‘ : 百分号代表任意数量的字符。
语法
select column1,column2,... from table_name where column1 like/not like ‘目标格式‘;
/*
解释:从数据源TABLE_NAME中查询出字段COLUMN1的内容包含/不包含目标格式的内容, 并列出COLUMN1,COLUMN2,…等几列数据
*/
示例
select * from emp where ename like ‘__A%‘; --查询名字第三位是A的员工信息
转义字符
当目标格式包含 ‘ _ ‘ , " ‘ ",‘ % ‘,需要其本意时,我们就需要转义
语法
where column1 like/not like ‘目标格式‘ escape ‘自行设置的转义字符‘;
示例
select * from emp where ename like ‘%\%%‘ escape ‘\‘; ----查询包含%的员工信息
注意
-
只有‘ _ ‘,‘ % ‘, " ‘ " 需要转义
-
两个英文单引号表达一个英文单引号的含义
select * from emp where ename like ‘%‘‘%‘; --查询员工姓名带有单引号的员工信息
- 除了‘ _ ‘ ,‘ % ‘ , " ‘ "之外其他符号直接写即可表达其原本含义
排序查询
? 在检索数据时,如果把数据从数据库中直接读取出来,这时查询结果将按照默认顺序排列,但往往这种默认排列顺序并不是用户所需要看到的。尤其是返回数据量较大时,用户查看自己想要的信息非常不方便,因此需要对检索的结果集进行排序。
语法
select column1,column2,... from table_name where condition order by column1 asc/desc;
关键字:order by正序/倒序(升序/降序):asc(默认,可省略)/desc
ORDER BY 子句可以根据查询结果中的一个列或多个列对查询结果进行排序,并且第一个排序项是主要的排序依据,其次那些是次要的排序依据。
分类:
1.按排序规则
1)升序 排序项为升序
2)降序 排序项为降序
3)同升同降 前排序项为升序/降序,后排序项也为升序/降序
4)升降混合 前排序项为升序/降序,后排序项也为降序/升序
2.按排序内容
1)原字段
2)表达式(函数、计算)
3)代号(字段别名)
示例
select * from emp order by sal asc; --查询emp表中根据工资升序排序 (升序,asc 可省略)select * from emp order by sal desc; --根据工资列降序排序 (降序)
select * from emp order by deptno,sal;--先根据部门升序排序,再根据工资升序排序 (同升)
select * from emp order by deptno desc,sal desc;--先根据部门升序降序,再根据工资降序排序 (同降)
select * from emp order by deptno desc,sal;--先根据部门降序排序,再根据工资升序排序 (升降混合)
select * from emp order by sal + 500;--查询emp表,将工资加500后升序排序 (表达式)
select * from emp order by lower(ename) desc;--查询emp表,将姓名改为小写后降序排序 (函数)
select ename,sal s from emp order by s;--查询emp表中的员工姓名,工资,并按照工资升序排序 (代号)
NULL值的默认排序和强制排序
语法
1)NULL值的默认排序为极大值,即升序排序时空值排在最后,降序排序时空值排在最前2)
强制空值排在最前:NULLS FIRST3)
强制空值排在最后:NULLS LAST
示例
select * from emp order by comm; --升序排序时空值排在最后
select * from emp order by comm null first; --强制null排在前面