02、Oracle过滤和排序数据

这篇具有很好参考价值的文章主要介绍了02、Oracle过滤和排序数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1 【where 子句基本语法】

02、Oracle过滤和排序数据

where 子句中的条件有许多形式, 只有表中符合这些条件的行才会返回。

where 子句中不可以使用列的别名。
如果条件列是数字型的, 可以直接写;
如果条件列是字符型的, 需要使用单引号;
如果条件列是日期型的, 要注意日期格式, 单引号。
需求: 查询 10号部门的员工姓名

-- 查询 10 号部门的员工姓名  
SCOTT@orcl>select deptno,ename from emp where deptno=10;

02、Oracle过滤和排序数据


1.2 【字符串和日期】

02、Oracle过滤和排序数据

  1. 字符串和日期要用单引号引起来。
  2. 字符串大小写敏感。(区分大小写)
SCOTT@orcl>select * from emp where job='clerk';

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where job='CLERK';

02、Oracle过滤和排序数据

  1. 日期值对于日期的格式敏感。
    缺省的日期值格式: DD-MON-RR需求: 查询入职日期是 1980-12-17 的员工信息 .

    【补充知识】 转换函数 to_date (备注: hiredate 是 date 类型)
SCOTT@orcl>select * from emp where hiredate='17-DEC-80';

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where hiredate=to_date('
1980-12-17','yyyy-mm-dd');

02、Oracle过滤和排序数据


1.2.1 【数据库默认日期格式】

注意用户为sysdba

SYS@orcl>select property_name,property_value
  2  from database_properties
  3  where property_name='NLS_DATE_FORMAT';

02、Oracle过滤和排序数据


1.2.2 【当前会话默认日期格式】

注意用户为**scott**

SCOTT@orcl>select * from v$nls_parameters
  2  where parameter='NLS_DATE_FORMAT';

02、Oracle过滤和排序数据


1.2.3 【修改当前会话日期格式】

SCOTT@orcl>alter session set nls_date_format ='yyyy-mm-dd hh24:mi:ss';
SCOTT@orcl>select sysdate from dual;

02、Oracle过滤和排序数据
退出 sqlplus 重新登录后恢复默认


1.3 【比较操作符】

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where deptno = 10;
SCOTT@orcl>select * from emp where deptno <>10;
SCOTT@orcl>select * from emp where deptno!=10;

02、Oracle过滤和排序数据

02、Oracle过滤和排序数据
02、Oracle过滤和排序数据


1.3.1 【空值的不等于比较】

【注意】 包含空值的列进行比较, 要对空值进行处理。
否则进行比较 空值默认为无限大
需求: 查询工资大于奖金的员工

-- 查询工资大于奖金的员工 
SCOTT@orcl>select * from emp where sal>comm;

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where sal>nvl(comm,0);

02、Oracle过滤和排序数据


1.3.2 【where 子句中使用 rownum 伪列】

因为 ROWNUM 是对结果集加的一个伪列: 即先查到结果集之后再加上去的一个列
(说明: 先要有结果集)。 通俗的说 rownum 是对符合条件结果的序列号。 它总是从 1 开始排起的。
所以你选出的结果不可能没有 1, 而有其他大于 1 的值。where 子句中使用 rownum 伪列进行限定时, 使用<或<=, 使用>不返回行。

SCOTT@orcl>select rownum,deptno,dname from dept; 
SCOTT@orcl>select rownum,deptno,dname from dept where rownum=2;
SCOTT@orcl>select rownum,deptno,dname from dept where rownum>2;
SCOTT@orcl>select rownum,deptno,dname from dept where rownum<=2;

02、Oracle过滤和排序数据

rownum<and 并用时, 是在另一个条件 and 基础上的 rownum<
也就是说先执行 and 后面的条件, 返回满足条件的数据, 然后再进行 rownum<

SCOTT@orcl>select rownum,ename,deptno from emp;

02、Oracle过滤和排序数据

SCOTT@orcl>select rownum,ename,deptno from emp where rownum<2;

02、Oracle过滤和排序数据

SCOTT@orcl>select rownum,ename,deptno from emp where deptno=10;

02、Oracle过滤和排序数据

SCOTT@orcl>select rownum,ename,deptno from emp where rownum<2
  2  and deptno=10;

02、Oracle过滤和排序数据


1.3.3 【范围】 (between and)

需求: 查询工资在 **800~1000 **范围内的员工。

-- 查询工资在 800~1000 范围内的员工。 
SCOTT@orcl>select * from emp where sal between 800 and 1000;
SCOTT@orcl>select * from emp where sal between 1000 and 800;

02、Oracle过滤和排序数据
【注意】 **between and **同时包括上下限边界, 小值写在前; 否则不返回结果。

**between and **也可以处理字符、 日期类型。
between ‘a’ and ‘c’ 时, 包含’c’ 不包含’ca’、 **‘cb’**等等以 **c **字母开头的。【注意】 日期格式, 否则报错

SCOTT@orcl>select * from emp where hiredate between '09-08-21' and '01-02-14';

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where hiredate between '09-JUN-81' and '23-JAN-82'

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where ename between 'A' and 'C';

02、Oracle过滤和排序数据


1.3.4 【列举 in】

可以使用 IN 操作符来检查一个值是否在值的列表中。

SCOTT@orcl>select empno,ename,sal,mgr from
  2  emp where mgr in(7902,7566,7788);

02、Oracle过滤和排序数据

SCOTT@orcl>select empno,ename,sal,mgr from emp
  2  where mgr=7902 or mgr=7566 or mgr=7788;

02、Oracle过滤和排序数据

下面查询使用 NOT IN 检索那些未被 IN 检索出来的行:

SCOTT@orcl>select * from emp where comm in(300,500); 
SCOTT@orcl>select * from emp where comm not in (300,500);

02、Oracle过滤和排序数据
【注意】 如果列表中包含空值, 那么 NOT IN 返回 false。 下面这个查询可以说明这
一点 , 它不返回任何行, 因为列表中包含空值:

SCOTT@orcl>select * from emp where comm not in (300,500,null);

02、Oracle过滤和排序数据

1.3.5 【模糊查询 like】

02、Oracle过滤和排序数据
需求: 查询姓名中包含 **MI **的。

SCOTT@orcl>select * from emp where ename like '%MI%';

02、Oracle过滤和排序数据

1.3.5.1【escape 转义】

02、Oracle过滤和排序数据
创建测试表、 修改数据

SCOTT@orcl>create table emp1 as select * from emp;
SCOTT@orcl>update emp1 set ename='OCM_DBA' where empno=7788;
SCOTT@orcl>commit;

-- 查询
SCOTT@orcl>select * from emp1;

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp1 where ename like '%_%';

02、Oracle过滤和排序数据

【说明】
**_代表任一字符
转义符(
\ **、 $) 后的通配符失去通配功能, 变为普通字符

SCOTT@orcl>select * from emp1 where ename like '%\_%' escape '\';

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp1 where ename like '%$_%' escape '$';

02、Oracle过滤和排序数据

1.3.6 【空值比较 is null is not null】

02、Oracle过滤和排序数据
空值和空值不能用**= **来判断例如: 未知数 x 和未知数 y , 都是未知值, 不能用=
需求: 查询奖金是空值(不是空值) 的员工信息

-- 查询奖金是空值(不是空值) 的员工信息 
SCOTT@orcl>select * from emp where comm is null;

02、Oracle过滤和排序数据

SCOTT@orcl>select * from emp where comm is not null;

02、Oracle过滤和排序数据

1.4 【逻辑运算符】

02、Oracle过滤和排序数据
实现多个条件的组合, 逻辑操作符根据逻辑条件来限定行

1.4.1 【AND】

02、Oracle过滤和排序数据
需求: 查询工资大于等于 **1100 **并且工作是 **CLERK **的员工信息

-- 查询工资大于等于 1100 并且工作是 CLERK 的员工信息 
SCOTT@orcl>select * from emp
  2  where sal >=1000  and  job='CLERK';

02、Oracle过滤和排序数据
需求: 查询工资在 **800~1000 **范围内的员工。

-- 查询工资在 800~1000 范围内的员工。 
SCOTT@orcl>select * from emp where sal>=800 and sal <=1000;

02、Oracle过滤和排序数据

-- 扩展
SCOTT@orcl>select * from emp where sal between 800 and 1000;

02、Oracle过滤和排序数据

1.4.2 【OR】

02、Oracle过滤和排序数据
需求: 查询工资大于 **1100 **或者工作是 **CLERK **的员工信息

-- 查询工资大于 1100 或者工作是 CLERK 的员工信息
SCOTT@orcl>select * from emp where sal >=1100 or job='CLERK';

02、Oracle过滤和排序数据
需求:查询经理号是 **7902 **或者 **7566 **或者 **7788 **的员工

-- 查询经理号是 7902 或者 7566 或者 7788 的员工 
SCOTT@orcl>select empno,ename,sal,mgr from emp
  2  where mgr=7902 or mgr=7566 or mgr=7788;

02、Oracle过滤和排序数据

1.4.3 【NOT】

02、Oracle过滤和排序数据
需求:查询工作不是 CLERKMANAGER、 **ANALYST **的员工

-- 查询工作不是 CLERK、 MANAGER、 ANALYST 的员工 
SCOTT@orcl>select ename,job from emp
  2  where job not in ('CLERK','MANAGER','ANALYST');

02、Oracle过滤和排序数据

SCOTT@orcl>select ename,job from emp 
  2  where job!='CLERK' and job!='MANAGER' and job!=upper('analyst');

02、Oracle过滤和排序数据

1.5 【优先级规则】

需求:查询工作是 **SALESMAN **或者 **PRESIDENT **的员工中,工资大于 **1500 **的员工。

-- 查询工作是 SALESMAN 或者 PRESIDENT 的员工中,工资大于 1500 的员工。
SCOTT@orcl>select ename,job,sal from emp
  2  where job='SALESMAN' or job ='PRESIDENT' and sal>1500;

02、Oracle过滤和排序数据

结果中出现 sal 小于 1500 的员工,不符合要求。
02、Oracle过滤和排序数据

SCOTT@orcl>select ename,job,sal from emp
  2  where (job='SALESMAN' or job='PRESIDENT') and sal>1500;

02、Oracle过滤和排序数据

SCOTT@orcl>select ename,job,sal from emp
  2  where job in('SALESMAN','PRESIDENT') and sal>1500;

02、Oracle过滤和排序数据

1.6 【order by 子句: 排序】

【order by 子句】
desc 降序, asc 升序。
order by 列名, order by 别名, order by 列序号, order by 表达式

如果有 where 子句, order by 子句跟在 where 子句后面。**order by **子句是 **select **语句中最后一个子句。

1.7 【升序 asc】

默认是 **asc **升序:
数字升序:由低到高
日期升序:由早到晚
字符升序:按字母表顺序(区分大小写)

SCOTT@orcl>select * from emp order by sal;

02、Oracle过滤和排序数据

1.8 【降序 desc】

SCOTT@orcl>select * from emp order by sal desc;

02、Oracle过滤和排序数据

1.9 【按照列的别名排序】

SCOTT@orcl>select ename,sal salary from emp order by salary;

02、Oracle过滤和排序数据
如果列别名用双引号定义, **order by **排序时注意格式

SCOTT@orcl>select ename,sal "salary" from emp order by salary;
SCOTT@orcl>select ename,sal "salary" from emp order by "salary";

02、Oracle过滤和排序数据

1.10 【按照列序号排序:位置排序】

列序号:列在 **select **子句中出现的位置

SCOTT@orcl>select empno,ename,deptno from emp order by 3,1;

02、Oracle过滤和排序数据

1.11 【多个列排序:混合排序】

SCOTT@orcl>select * from emp order by deptno,sal desc;

02、Oracle过滤和排序数据

1.12 【排序中的 null 值】

包含 null 值的列排序时, 默认把 null 值看做无限大:
在升序排序时, nulls last
在降序排序时, nulls first

SCOTT@orcl>select empno,ename,sal,comm from emp order by comm;

02、Oracle过滤和排序数据
文章来源地址https://www.toymoban.com/news/detail-411229.html

1.13 【order by 的部分限制】

  1. order by 后面不能跟 LOB、 LONG、 LONG ROW 类型的列。
  2. select 语句中有 distinct 关键字, order by 后面的列 必须出现在 select 子句中。
  3. order by 根据字符排序时,区分大小写

到了这里,关于02、Oracle过滤和排序数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle FETCH子句详解

    目录 一、语法 二、oracle等同写法 三、Mysql等同写法 由于oracle不能使用limit,所以用fetch用来限制查询返回的行数。 说明: OFFSET是偏移量,常数,不写默认为0,常用于分页。 FETCH NEXT 1 ROWS 等同于 FETCH FIRST 1 ROW。 only只返回指定的量,with ties 返回和最后一条数据相同的数据。

    2024年02月14日
    浏览(20)
  • 【postgresql 基础入门】分组查询 group by 子句的写法,分组条件过滤having子句的写法,多列的分组以及与join联合的多表分组

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 本文主要分享在postgresql 数据库中对查询结果进行分组group by,以及对分组进行条件过滤having,同时对它

    2024年04月11日
    浏览(38)
  • neo4j查询语言Cypher详解(一)--语法和子句

    neo4j 的图查询语言叫 Cypher 。Cypher的独特之处在于它提供了一种匹配模式和关系的可视化方式。 (nodes)-[:ARE_CONNECTED_TO]-(otherNodes) 使用圆角括号表示节点(nodes), -[:ARROWS]- 表示关系。 Cypher解析器接受任意输入字符串。 unicode 通常可以使用转义 uxxx 。 支持的空白符 描述 Unicode 字

    2024年02月14日
    浏览(37)
  • SQLite学习(七)SQLite的HAVING、DISTINCT、JOIN、UNION子句语法和应用

    在上一篇《SQLite学习(六)SQLite的GLOB、LIMIT、ORDER、GROUP UP子句语法和应用》 中,讲解了 SQLite的GLOB、LIMIT、ORDER、GROUP UP 子句语法,在本篇博客中,将继续讲解 SQLite 子句的基本语法。 同学们将学习到: SQLite HAVING 子句语法 SQLite DISTI

    2024年02月06日
    浏览(29)
  • SQLite学习(六)SQLite的GLOB、LIMIT、ORDER、GROUP UP子句语法和应用

    在上一篇《SQLite学习(五)SQLite的WHERE、AND、OR、LIKE子句语法和应用》 中,讲解了 SQLite中 WHERE、AND、OR、LIKE 子句的语法,在本篇博客中,将继续讲解 SQLite 子句的基本语法。 同学们将学习到: SQLite GLOB 子句语法 SQLite LIMIT 子句语法 SQLite ORDER 子句语法 SQLite GROUP UP 子句语法

    2024年02月06日
    浏览(59)
  • Oracle中LEFT JOIN后AND与WHERE的异同

    1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 (1)、建表及插入测试数据 (2)、on后面and 条件表示先过滤之后,再连接 以下两种写法,所得的结果相同: (3)、on后面where条件表示先关联之后,再过滤   (4)、全值的情况   (5)、说明: 用到此类连接的情况,多为事实表为主表,维

    2024年02月10日
    浏览(32)
  • 数据库管理-第111期 Oracle Exadata 02-硬件构成(20231017)

    新开的坑,感觉一般般,还是坚持写下去吧。 这里集合汇总一下之前写过的和Exadata相关的文章: 数据库管理-第三十七期 我搞挂了一台一体机(20220925) 数据库管理-第三十八期 一体机上不了网了(20221010) 数据库管理-第四十三期 水一期(20221113) 数据库管理-第四十九期

    2024年02月08日
    浏览(29)
  • SpringBoot集成Jpa对数据进行排序、分页、条件查询和过滤

    之前介绍了SpringBoot集成Jpa的简单使用,接下来介绍一下使用Jpa连接数据库对数据进行排序、分页、条件查询和过滤操作。首先创建Springboot工程并已经继承JPA依赖,如果不知道可以查看我的另一篇文进行学习,这里不做介绍。文章地址(https://www.cnblogs.com/eternality/p/17391141.htm

    2024年02月04日
    浏览(32)
  • Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)

    异构数据库的迁移(譬如从Oracle迁移到PostgreSQL)工作主要包括三个方面, 数据库对象的迁移,包括库、模式、表、索引、视图、触发器、存储过程等等; 数据内容的迁移,主要指的是数据表中的数据; 数据应用的迁移,主要指的是应用中SQL语句的迁移。 目前对于数据库对

    2024年04月08日
    浏览(67)
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 使用stream().map()提取List对象的某一列值及去重 使用 findAny() 和 findFirst() 获取第一条数据 我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!! 参考链接、参考链接

    2024年04月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包