Oracle的WHERE条件和排序

一、条件简介
了解条件的一般形式
最普通的条件如下形式:

gyj@OCM> Select * from t1 where name='gyj2';

       ID NAME           SALARY
---------- ---------- ----------
        2 gyj2             8000

条件只能跟在WHERE之后,用来限制输出的行。通常条件的形式是“列名 比较运算符 值”的形式。上面例子中,比较运算符就是“=”,也就是寻找NAME等于’gyj2’的行。

二、比较运算符
1、运算符形式的比较符号(PPT)
运算符            含义
=                     等于
>                     大于
>=                   大于等于
<                     小于
<=                   小于等于
<> ,!= ,^=    不等于

了解各种比较运算符的意义,这一块比较简单,我就不多说了。

2、非运算符形式的比较符号
了解BETWEEN、IN、LIKE、IS NULL 、EXIST的使用,并了解通配符在LIKE中的使用
(1)列名 [NOT] BETWEEN …… AND …… :在两数之间(并且包括这两个数)

gyj@OCM> select * from t1 where id between 4 and 6;

       ID NAME           SALARY
---------- ---------- ----------
        4 gyj4            15000
        5 gyj5            12000
        6 gyj6            12000

显示雇员编号在4和6之间的。在BETWEEN前加上NOT,意义正好相反,表示在两数之外:

gyj@OCM> select * from t1 where id not between 4 and 6;

       ID NAME           SALARY
---------- ---------- ----------
        2 gyj2             8000
        3 gyj3            10000
        7 gyj7            12000
        1 gyj1            12000
        1 gyj1            20000

(2)列名 [NOT] IN (值1,值2,……) : 列值等于值1或等于值2或值3,等等。

gyj@OCM>  select * from t1 where id in (5,6,7);

       ID NAME           SALARY
---------- ---------- ----------
        5 gyj5            12000
        7 gyj7            12000
        6 gyj6            12000

显示雇员编号等于5,6,7的,如果我们在IN前面加上NOT,显示的结果是id不等于5或6或7的行。

gyj@OCM>  select * from t1 where id not in (5,6,7);
gyj@OCM> select * from t1 where id not in (5,6,7);

       ID NAME           SALARY
---------- ---------- ----------
        2 gyj2             8000
        3 gyj3            10000
        4 gyj4            15000
        1 gyj1            12000
        1 gyj1            20000

(3)字符型列LIKE ‘字符串’ :字符串匹配运算符。

gyj@OCM> select * from t1 where name like 'gyj2';

       ID NAME           SALARY
---------- ---------- ----------
        2 gyj2             8000

看它的效果,它有点类似于“=”。但是它的功能比等号强。因为它可以使用如下通配符:
_ : 对应任意的一个字符。
% : 对应任意长度的任意字符。
其中%的任意长度可以是从0到任意长度。而_对应的字符,必需是一个。

gyj@OCM> select * from t1 where name like '_o%';

       ID NAME           SALARY
---------- ---------- ----------
        9 Joe             22000
       10 Tom             28000

时间: 2024-12-03 16:27:26

Oracle的WHERE条件和排序的相关文章

在oracle select 的条件后面跟上into是什么意思?

问题描述 在oracle select 的条件后面跟上into是什么意思? select nvl(sum(列1),0) as 别名, nvl(sum(列2),0) as 别名 from T_表名 where 列1 > 12 case 列1 when '1' then ... into 列名n 这里的into代表什么意思,请高手指点,谢谢! 解决方案 into一般有两种使用方法, 一种是将结果赋值给变量,在存储过程或程序块中使用 如: select id into v_id from table1

Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出_oracle

ORDER BY非稳定的排序提一个问题: oracle在order by 排序时,是稳定排序算法吗? 发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by 时,两次排列的顺序不一致 看到业务描述的问题可以得到的结论order by排序不稳定,还有第一个印象就是,type肯定是不唯一的,并且没有索引吧. 这里先科普下排序的稳定性,举个最简单的例子,1,2,3,1,4,5 排序 排序的结果是1,1,2,3,4,5,这时候观察这个1,如果第一个1还是排序前

oracle数据库中关于null排序的问题

问题描述: 在处理一般的数据记录中,对于数字类型的字段,在oracle的排序中,默认把null值做为大于任何数字的类型,当然对于varchar2类型的字段,默认也是该处理方式,但是客户要求排序的过程中,需要把null的字段默认排在前边(从小-->大).一般的order by xxxx,无法解决. 问题解决: 方案1: 可以使用复杂的使用sql: select * from(select a.*,rownum as my_sys_rownum from (select deptid,nvl(BDZ

Oracle exp query条件检索在WINDOWS和LINUX下的命令区别

今天因为业务需要,运行了EXP的条件导出,发现WINDOWS和LINUX下有些差别,主要区别在于敏感字符,实例如下: LINUX: exp us/pass TABLES=\(t_ec_event\) file=/tmp/test.dmp QUERY=\"WHERE eventid =\'40288a2627f491080127fab7f17232b4\'\" WINDOWS: exp us/pass@test TABLES=(t_ec_event) file=test.dmp QUER

oracle/plsql case条件语句的用法

语句语法  代码如下 复制代码 CASE  [ expression ]   WHEN condition_1 THEN result_1   WHEN condition_2 THEN result_2   ...   WHEN condition_n THEN result_n   ELSE result END expression 可选的.它的价值,你比较的条件清单. (即:condition_1,condition_2,... condition_n) condition_1到cond

关于Oracle数据库中SQL空值排序的问题

在Oracle中进行查询排序时,如果排序字段里面有空值的情况下,排序结果可能会达不到自己想要的结果.   如 select * from tableTest order by VISITS desc   上图可以看到表示服务访问次数的"VISITS"字段上的空值记录排序时放在前面,和实际逻辑不对   将原来的sql语句改写为:select * from tableTest order by VISITS desc nulls last,   "nulls last"

MySQL IN 条件语句 排序方法

有个场景,一个几万条记录的表,主键是 id,我想从表中取 id 为 30,20,80,40 的几条记录. 注意,30,20,80,40,是我预期的顺序,我希望 MySQL 按这样的顺序返回记录. 于是我这样写 SQL:  代码如下 复制代码 SELECT * FROM my_table WHERE id IN (30, 20, 80, 40); 结果是,他没有按我给的顺序返回. 怎么办? 查到了 FIELD() 函数.  代码如下 复制代码 FIELD(str,str1,str2,str3,-)

sql条件查询+排序

  一条sql为: select * from user where gender='1' order by id desc; 加索引方式: 1:为gender添加索引 2:为id添加索引 3:为id和gender添加联合索引 事实证明 1是正确的,使用gender索引,这条sql索引级别达到const级别. 如果使用联合索引则达到了index级别 实际上运行速度,数据库7w条数据情况下,查询前100条数据 1:使用了0.07s 2:使用了0.2+s 因此,1方式的索引速度更快

java多条件优先级排序 --- Comparator

package com; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class ComparatorDemo { public List<Student> mList; public List<Comparator<Student>> mCmpList = new ArrayLis