首页 > 数据库 >3、Oracle 中的过滤、排序

3、Oracle 中的过滤、排序

时间:2024-05-18 09:07:31浏览次数:29  
标签:last name employees 过滤 Oracle 排序 WHERE id SELECT

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。
视频链接:
【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用
如果有侵权,请联系删除,谢谢。

更加详细的教程,可以直接观看此链接Oracle教程

1、过滤

1.1、基本使用方式

使用方式:使用 WHERE 子句,将不满足条件的行过滤掉。

SELECT	*|{[DISTINCT] column|expression [alias],...}
FROM	table
[WHERE	condition(s)];

WHERE 子句紧随 FROM 子句。

比如:

-- 查询 department_id 等于 90 的数据
SELECT employee_id, last_name, job_id, department_id
FROM   employees
WHERE  department_id = 90 ;

1.2、过滤中使用字符和日期

过滤条件中使用字符和日期,有以下几点需要注意:

  • 字符和日期要包含在单引号中
  • 字符大小写敏感,日期格式敏感
  • 默认的日期格式是 DD-MON月-RR。(eg: 7-7月-1996)。使用此方式容易出现格式不匹配,后面再单行函数中做转换后查询。
-- 字符串查询
SELECT last_name, job_id, department_id
FROM   employees
WHERE  last_name = 'Whalen';


--日期查询
SELECT last_name, hire_date, department_id
FROM   employees
WHERE  hire_date = '7-6月-1994';

--使用单行函数后的日期查询
SELECT last_name, hire_date, department_id
FROM   employees
WHERE  to_char(hire_date, 'yyyy-mm-dd') = '1994-06-07';

以下的查询方式都不对:

-- ORA-00904: "yyyy-mm-dd": 标识符无效
WHERE  to_char(hire_date, "yyyy-mm-dd") = '1994-06-07';  -- 报错

WHERE  to_char(hire_date, 'yyyy-mm-dd') = '1994-6-07';  -- 得不到正确数据

1.3、where 条件中的比较运算

赋值使用 := 符号

1、比较运算

-- 查询薪资小于等于3000的
SELECT last_name, salary
FROM   employees
WHERE  salary <= 3000;

1.4、其它比较运算

1、BETWEEN

使用 BETWEEN 运算来显示在一个区间内的值

-- 查询薪资大于等于2500并且小于等于3500的
SELECT last_name, salary
FROM   employees
WHERE  salary BETWEEN 2500 AND 3500;

2、IN
使用 IN运算显示列表中的值。

-- 查询薪资等于 100或者101或者201的
SELECT employee_id, last_name, salary, manager_id
FROM   employees
WHERE  manager_id IN (100, 101, 201);

1.5 LIKE

  • 使用 LIKE 运算选择类似的值(模糊查询)
  • 选择条件可以包含字符或数字:
  • % 代表零个或多个字符(任意个字符)
  • _代表一个字符。
-- 查询first_name 以S开头的
SELECT	first_name
FROM 	employees
WHERE	first_name LIKE 'S%';

1、%-可以同时使用。

-- 查询第二个字符是o的数据
SELECT last_name
FROM   employees
WHERE  last_name LIKE '_o%';

2、可以使用 ESCAPE 标识符 选择%_ 符号。

回避特殊符号的:使用转义符。例如:将[%]转为[%]、[_]转为[_],然后再加上[ESCAPE ‘\’] 即可。

-- 查询以 IT_ 开头的数据。注意查询后面需要加上 escape 。
SELECT job_id
FROM   jobs
WHERE  job_id LIKE 'IT\_%' escape '\';

1.6、NULL

使用 IS (NOT) NULL 判断空值。

-- 查询 manager_id 等于 NULL 的数据
SELECT last_name, manager_id
FROM   employees
WHERE  manager_id IS NULL;

1.7、逻辑运算

1.7.1、AND

AND 要求并的关系为真。

-- 查询salary 大于等于10000 并且 job_id 包含 MAN 的数据
SELECT employee_id, last_name, job_id, salary
FROM   employees
WHERE  salary >=10000
AND    job_id LIKE '%MAN%';
1.7.2、OR

OR 要求或关系为真。

-- 查询 salary 大于等于 或者 job_id 包含 MAN 的数据
SELECT employee_id, last_name, job_id, salary
FROM   employees
WHERE  salary >= 10000
OR     job_id LIKE '%MAN%';
1.7.3、NOT
-- 查询 job_id 不在 ('IT_PROG', 'ST_CLERK', 'SA_REP') 列表中的数据
SELECT last_name, job_id
FROM   employees
WHERE  job_id 
       NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

1.8、优先级

可以使用括号改变优先级顺序

2、ORDER BY子句

  • 使用 ORDER BY 子句排序
    • ASC(ascend): 升序
    • DESC(descend): 降序
  • ORDER BY 子句在SELECT语句的结尾
SELECT   last_name, job_id, department_id, hire_date
FROM     employees
ORDER BY hire_date ;

1、降序排序

SELECT   last_name, job_id, department_id, hire_date
FROM     employees
ORDER BY hire_date DESC ;

2、按别名排序

SELECT employee_id, last_name, salary*12 annsal
FROM   employees
ORDER BY annsal;

3、多个列排序

按照ORDER BY 列表的顺序排序。

SELECT last_name, department_id, salary
FROM   employees
ORDER BY department_id, salary DESC;

可以使用不在SELECT 列表中的列排序。

SELECT last_name, department_id
FROM   employees
ORDER BY salary DESC;

select 语句表达式

SELECT     *|{[DISTINCT] column|expression [alias],...}
FROM       table
[WHERE     condition(s)]
[ORDER BY  {column, expr, alias} [ASC|DESC]];

练习题:
1、选择姓名中有字母a和e的员工姓名

select last_name
from employees
where last_name like '%a%e%' or last_name like '%e%a%'

标签:last,name,employees,过滤,Oracle,排序,WHERE,id,SELECT
From: https://www.cnblogs.com/huageyiyangdewo/p/18137320

相关文章

  • ORACLE 物理读 逻辑读 一致性读 当前模式读区别
    转自:https://www.cnblogs.com/kerrycode/p/5940626.html在ORACLE数据库中有物理读(PhysicalReads)、逻辑读(LogicalReads)、一致性读(ConsistantGet)、当前模式读(DBBlockGets)等诸多概念,如果不理解或混淆这些概念的话,对你深入理解一些知识无疑是一个障碍,但是这些概念确实挺让让人犯......
  • Junit5的使用:排序注释
    packagecom.test.api.junit;importorg.junit.jupiter.api.*;importorg.junit.jupiter.params.ParameterizedTest;importorg.junit.jupiter.params.provider.CsvFileSource;importorg.junit.jupiter.params.provider.CsvSource;importorg.junit.jupiter.params.provider.......
  • Django自定义模板标签与过滤器
    title:Django自定义模板标签与过滤器date:2024/5/1718:00:02updated:2024/5/1718:00:02categories:后端开发tags:Django模版自定义标签过滤器开发模板语法Python后端前端集成Web组件Django模板系统基础1.Django模板语言概述Django模板语言(DTL)是一种用......
  • Oracle 游标更新优化
    1.情景展示一共有22w条数据, 需要将A表的主键更新至B表的指定字段,如何快速完成更新?2.解决方案声明:解决方案不只一种,该文章只介绍快速游标法及代码实现;两张表的ID和ID_CARD字段都建立了索引。 方式一:使用隐式游标(更新一次提交1次) --快速游标法BEGINFO......
  • 动态排序
    usingDynamicSort;usingMicrosoft.EntityFrameworkCore;List<StudnetEntity>studentList=newList<StudnetEntity>(){newStudnetEntity(){Name="Chen",Age=28},newStudnetEntity(){Name="Wang",Age=29}};......
  • Oracle移动文件
    关闭数据库SQL>shutdownimmediateDatabaseclosed.Databasedismounted.ORACLEinstanceshutdown.移动数据文件,用oracle用户操作[oracle@test~]$mv/u01/app/oracle/oradata/ORCL/system01.dbf/home/oracle/oradata/system01.dbf[oracle@test~]$mv/u01/app/oracl......
  • spring security 使用过滤器认证登录时,抛出自定义异常
    前情提要最近在做项目的改造,涉及到新增用户的离职冻结状态,当被离职/冻结后,尝试登录系统,则抛出不同的异常代码给前端,前端依据不同的异常代码提示不同的文本。所以需要对项目的认证逻辑简单调整,增加按照不同的登录用户的状态(离职/冻结)判断,如果满足指定状态,则抛出对应的异常代码。......
  • DataX将Oracle数据库数据同步到达梦数据库
    1.DataX3.0开源版本,rdbms里面默认是达梦7的驱动,因此,如果像链接达梦8需要替换驱动。需要将达梦8的驱动放在D:\datax\lib、D:\datax\plugin\reader\rdbmsreader\lib和D:\datax\plugin\reader\rdbmswriter\lib下D:\datax\plugin\reader\rdbmsreader\plugin.json和D:\datax\plugin\re......
  • Oracle11g-EXP-00091错误
    环境说明oracle11gwin10问题情况在终端中exp导出数据库时,遇到报错“EXP-00091”,按照网上教程修改NLS_LANG但是没有效果。最终原因在power中设置环境变量NLS_LANG的方法与CMD不一样。备注记录先通过服务端查询编码集select*fromnls_database_parameterstwheret.pa......
  • 关于SpringBoot项目使用Hutool工具进行json序列化时出现Null值过滤或者丢失的问题(转
    ##问题描述:SpringBoot项目中,一直使用的时Hutool的json转换工具,被强制要求不能使用fastJson工具;之前都没什么问题,突然有一次使用parseObj()进行json字符串转换json对象时,突然报错:Noserializerfoundforclasscn.hutool.json.JSONNullandnopropertiesdiscoveredtocreate......