今天是学习Java的 第29天。

今天学习了数据库中DQL语言中的逻辑条件关系,优先规则,使用order by 排序。学习了Oracle函数,包括单行函数和多行函数,学习了字符函数,字符处理函数,数字函数,数字处理函数,日期处理使用的日期函数,数据类型转换等,隐式类型转换、显示类型转换,转换函数等。

逻辑条件关系 :

逻辑条件:逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果, 或者逆转一个单个条件的结果。当所有条件的结果为真时,返回行。SQL 的三个逻辑运算符是:AND 、OR 、NOT

AND 要求两个条件同时为真。

例:Ø 查询工作岗位包含字符串 MAN 并且收入大于等于$10,000 的那些雇员的编号、工作 ID、名字以及薪水。

select employee_id,job_id,last_name,salary from employees where job_id like'%MAN%' and salary >= 10000;

OR 操作要求两者之一为真即可。 例:

Ø 查询任何 jobID 中包含 MAN 或者收入大于等于$10,000 的雇员编号、工作 ID、名字 以及薪水

select employee_id,job_id,last_name,salary from employees where job_id like '%MAN%' or salary >= 10000;

将上面语句中的and 改为 or 即可;

NOT:取反。NOT 运算符也可以用于另一个 SQL 运算符,例如,BETWEEN、LIKE、 IN 和 NULL。 示例:

查询那些工作岗位不是 IT_PROG、ST_CLERK 或 SA_REP 的雇员的名字和工作岗 位。

select last_name,job_id from employees where job_id not in

('IT_PROG' , 'ST_CLERK' , 'SA_REP');

优先规则:

优先规则:优先规则定义表达式求值和计算的顺序,表中列出了默认的优先顺序。可

以用圆括号括住你想要先计算的表达式来覆盖默认的优先顺序。 示例:

查询工作岗位是 SA_REP 或者工作岗位是 AD_PRES 并且薪水大于 15000 的员工姓名、 工作 ID 以及薪水。

select last_name,job_id,salary from employees where job_id = 'SA_REP' or

job_id='AD_PRES' and salary > 10000;

ORDER BY 子句:用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序 (DESC)如果不指定排序规则默认为升序排序。在排序中也可以使用没有包括在 SELECT 子句中的列排序。如果未使用 ORDER BY 子句,排序次序就未定义,并且 Oracle 服务器可能对于相同查询的两次执行取回行的顺序不同。

ORDER BY 语法 :

ORDER BY 子句在 SELECT 语句的最后

ORDER BY 后侧指定需要排序列

ASC 以升序排序行 (这是默认排序)

DESC 以降序排序行

升序规则 :

对于数字值,小的值在前面显示—例如,1–999。

对于日期,早的日期在前面显示—例如,01-1-92 在 01-1-95 前面 。

对于字符值,依字母顺序显示—例如,A 第一,Z 最后。

对于空值,升序排序时显示在最后,降序排序时显示在最前面

示例:

使用HR登录查询员工表,查询部门编号为50的员工信息并按照薪水倒序排列

select * from employees where department_id = 50 order by salary DESC;

可以使用投影的列的序号指定排序列,但是不推荐。

可以使用列的别名指定排序列。

多列排序:可以用多列排序查询结果。在 ORDER BY 子句中,多个指定的列名之间用逗号分开。如果想要对某个列倒序排序需则在该列名后面指定 DESC。

示例:select hire_date,salary from employees order by hire_date,salary desc; SELECT

语句的执行顺序如下:

FROM 子句

WHERE 子句

SELECT 子句

ORDER BY 子句

约束与排序的练习示例 :

创建一个查询,显示收入超过 $12,000 的雇员的名字和薪水并排序。

select last_name,salary from employees where salary > 12000 order by salary;

创建一个查询,显示雇员号为 176 的雇员的名字和部门号。

select last_name,department_id from employees where employee_id = 176;

显示所有薪水不在 5000 和 12000 之间的雇员的名字和薪水。

select last_name,salary from employees where salary not between 5000 and 12000;

显示受雇日期在 2002 年 2 月 20 日 和 2007 年 5 月 1 日 之间的雇员的名字、岗位和受雇日期。按受雇日期 顺序排序查询结果。

select last_name,job_id, hire_date from employees where hire_date between '22-2 月-02' and '01-5 月-07' order by hire_date;

显示所有在部门 20 和 50 中的雇员的名字和部门号,并以名字按字母顺序排序。

select last_name,department_id from employees where department_id in (20,50) order by last_name;

列出收入在 $5,000 和 $12,000 之间,并且在部门 20 或 50 工作的雇员的名字和薪水。将列标题分别显示为 Employee 和 Monthly Salary。

select last_name "Employee",salary "Monthly Salary" from employees where salary between 5000 and 12000 and department_id in (20,50);

显示每一个在 2004 年受雇的雇员的名字和受雇日期。

select last_name ,hire_date from employees where hire_date like '%04';

显示所有没有主管经理的雇员的名字和工作岗位。

select last_name,job_id from employees where manager_id is null;

显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣金的降序排序数据。

select last_name ,salary , commission_pct from employees where commission_pct is not null order by salary desc ,commission_pct desc;

显示所有名字中第三个字母是 a 的雇员的名字。

select last_name from employees where last_name like '__a%';

显示所有名字中有一个 a 和一个 e 的雇员的名字。

select last_name from employees where last_name like '%a%' and last_name like '%e%';

显示所有工作是销售代表(SA_REP)或者普通职员 (ST_CLERK),并 且薪水不 等于 $2,500、$3,500 或 $7,000 的雇员的名字、工作和薪水。

select last_name,job_id,salary from employees where job_id in ('SA_REP' , 'ST_CLERK') and salary not in (2500,3500,7000);

显示所有佣金总计为 20% 的雇员的名字、薪水和佣金。

法一:

select last_name,salary,commission_pct from employees where commission_pct = 0.2;

法二:

select last_name,salary,commission_pct from employees where commission_pct = .20;

小结:要尽量避免因为条件运算关系或者运算逻辑顺序不正确而导致的错误,因为通常的这类错误并不会影响语句执行,不易排查。

Oracle 函数:

函数:是数据库产品中提供的能够处理查询结果的方法。

函数能够用于下面的目的:

• 执行数据计算;修改单个数据项 ; 格式化显示的日期和数字 ; 转换列数据类型 ;函数有输入参数,并且总有一个返回值。

函数类型:

单行函数:这些函数仅对单个行进行运算,并且每行返回一个结果。

多行函数(聚合函数):这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数。

函数语法:

function_name(arg1,arg2,.....)

function_name:是函数的名字。

arg1, arg2:是由函数使用的任意参数。参数可以是一个列名、用户提供的常数、变量值、 或者一个表达式。

单行函数的特性包括:

• 作用于每一个返回行,每行返回一个结果

• 可能需要一个或多个参数

• 可以修改结果集的数据类型

• 可以嵌套

• 可能返回一个与参数不同类型的数据值

• 能够用在 SELECT、WHERE 和 ORDER BY 子句中

字符函数:接受字符输入,可以返回字符或者数字值

数字函数:接受数字输入,返回数字值

日期函数:对 DATE 数据类型的值进行运算 (除了 MONTHS_BETWEEN 函数返回一

个数字,所有日期函数都返回一个 DATE 数据类型的值。)

转换函数:从一个数据类型到另一个数据类型转换一个值

通用函数: − NVL 、− NVL2 、− NULLIF 、− COALSECE 、− CASE 、− DECODE ;

字符函数:单行字符函数接受字符数据作为输入,既可以返回字符值也可以返回数字值

字符函数分类 :大小写处理函数 ; 字符处理函数。

lower 将大写转换为小写

upper 将小写转大写

initcap 首字母大写其余小写

instr 查询指定子串所处的位置

substr 截取指定长度的字符串

length 查询字符串的长度

trim 去除首尾指定字符

concat 字符串拼接

replace 替换指定位置的值

截取字符串:

大小写转换:

CONCAT(arg1,arg2):连接值在一起 (CONCAT 函数有两个输入参数)

arg1:字符串类型。字符拼接的值。 ;arg2:字符串类型。字符拼接的值。

SUBSTR(arg1,arg2,arg3):截取子串。

arg1:字符串类型。原字符串。 arg2:整数类型。开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则 表示倒是第二位以此类推),。arg3:整数类型。截取个数。

SUBSTR(arg1,arg2):截取子串。

arg1:字符串类型。原字符串。 arg2 开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则表示倒是第二 位以此类推)截取到末尾。LENGTH(arg1):以数字值显示一个字符串的长度。

arg2:字符串类型。计算长度的字符串。

INSTR(arg1,arg2):找到一个给定字符的数字位置。

arg1:字符串类型。原字符串。 arg2:字符串类型。查找内容。

INSTR(arg1,arg2,arg3,arg4):指定查找位置以及出现的次数。

arg1:字符串类型。原字符串。 arg2:字符串类型。查找内容。

arg3:整数类型。开始位置。 arg4:整数类型。第几次出现。

LPAD(arg1,arg2,arg3):用给定的字符左填充字符串到给定的长度。

arg1:字符串类型。原字符串。 arg2:整数类型。总长度。

arg3:字符串类型。填充的子字符串。

RPAD(arg1,arg2,arg3):用给定的字符右填充字符串到给定的长度。

arg1:字符串类型。原字符串。 arg2:整数类型。总长度。

arg3:字符串类型。填充的子字符串。

TRIM(arg1):从一个字符串中去除头(leading)或尾(trailing)或头尾两侧(both)的字符 (默认为头尾两侧) 如果 trim_character 或 trim_source 是一个文字字符,必须放在单引号中。

arg1 需要操作的字符串。FROM 为关键字。

格式 1:需要去掉的内容 FROM 原字符串

格式 2:leading|trailing|both 需要去掉的内容 FROM 原字符串。

去掉头尾两侧方法示例:

数值函数 :

ROUND(arg1,arg2):四舍五入指定小数的值。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数,可以是一个负数。负数则表示指定整数的位置。

ROUND(arg1):四舍五入保留整数。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数。

TRUNC(arg1,arg2):截断指定小数的值,不做四舍五入处理。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数,可以使一个负数。负数则表示指定整数的位置。

TRUNC(arg1):四舍五入保留整数。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数。

MOD(arg1,arg2):取余。

arg1:数字类型。被除数。

arg2:数字类型。除数。

四舍五入:

只舍不入:

日期的使用

SYSDATE 函数 :SYSDATE 是一个日期函数,它返回当前数据库服务器的日期和时间。

用日期计算 :

示例:显示所有在部门 90 中的雇员的名字和从业的周数。雇员的总工作时间以周计算。

MONTHS_BETWEEN(date1,date2):计算 date1 和 date2 之间的月数。其结果可以是正

的也可以是负的。如果 date1 大于 date2,结果是正的。反之,结果是负的。

date1:日期类型。 date2:日期类型。

ADD_MONTHS(date, n):添加 n 个日历月到 date。n 的值必须是整数,但可以是负的。

date:日期类型。 n:整数

NEXT_DAY(date, ‘char’):计算在 date 之后的下一个周(‘char’)的指定天的日期。char 的 值可能是一个表示一天的数或者是一个字符串。如果使用数字表示星期,1 是从星期日开始。 数字范围为:1-7。

date:日期类型。 char:数字或字符串。

LAST_DAY(date):计算包含 date 的月的最后一天的日期。

date:日期类型。

ROUND(date,‘fmt’):返回用格式化模式 fmt 四舍五入到指定单位的 date ,如果格式模 式 fmt 被忽略,date 被四舍五入到最近的天。

date:日期类型。 fmt:字符串类型。

TRUNC(date, ‘fmt’):返回用格式化模式 fmt 截断到指定单位的带天的。如果格式模式 fmt 被忽略,date 被截断到最近的天。

date:日期类型。 fmt:字符串类型。

示例:

数据类型装换:

隐式数据类型转换

隐式转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。

隐式转换的问题 1、性能影响:

隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描。当表的数

据量很大的时候,产生会很大的性能问题。比如说,VARCHAR2 和 NVARCHAR2 隐式数据

类型转换导致的性能问题。

2、不便于阅读:

由于隐式转换使得数据库编程人员和 DBA 难以了解到究竟发生了怎样的类型转换,而

且如果代码很多很长的话要查出错误就需要费很大的劲。

显示数据类型转换 :

通过数据库中的转换函数完成数据类型的转换。

TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。

arg1:数字或者日期类型。需要转换的数据。 fmt:转换格式。

to_char 日期转换 :

日期格式模板的元素

时间格式模板元素

示例:

java查询出来的日期类型_Java的第29天,Oracle函数相关推荐

  1. java日期类型_Java 学习笔记 (三) Java 日期类型

    以下内容摘自:  https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...

  2. java中两种异常类型_Java中的三种异常类型

    java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want thei ...

  3. java把string转int类型_java把String类型转换为int类型的方法

    java把String类型转换为int类型的方法 发布时间:2020-08-20 14:32:03 来源:亿速云 阅读:73 作者:小新 这篇文章将为大家详细讲解有关java把String类型转换为i ...

  4. java查询几万条数据_java一次性查询几十万,几百万数据解决办法

    java一次性查询几十万,几百万数据解决办法 java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指 ...

  5. java查询app下载量统计_java基础增强:统计网上app下载情况,并排序

    一入编程深似海,从此妹子是路人. 案例: 统计网站app下载的情况,后台数据如下: 日期,用户名,app名,下载渠道,所在城市,app版本 2017-08-15,xx老师,陌陌,app store,上 ...

  6. java嵌套类型 无法隐藏外层类型_java内部类深入详解 内部类的分类 特点 定义方式 使用...

    java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内部类 静态内部 ...

  7. java引用数据类型可以更改类型_java,基本数据类型和引用数据类型

    java中的数据类型分为基本数据类型和引用数据类型 基本数据类型 整型:byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用数据类型 ...

  8. java对象属性的作用域类型_java 对象和类

    类:类为对象定义属性和行为. 对象的定义:对象是代表现实世界可以明确标识的一个实体. 每个对象都有自己独特的标识.状态和行为. 一个对象的状态是由具体当前值的数据域来表示的. 一个对象的行为是由方法定 ...

  9. java判捕获e异常类型_Java SE7新特性之捕获多种类型的异常并且重新抛出使用改进的类型检查的异常...

    本文涵盖了以下主题: 处理多种类型的异常 重新抛出使用更宽泛的类型检查的异常 在Java SE 7 以及后续版本中, 一个简单的 catch 块可以处理多种类型的异常.这种特性可以减少重复代码以及对于 ...

最新文章

  1. 【Harvest源码分析】获取F0轮廓
  2. Apache Kafka之设计
  3. Linux中的Screen命令使用技巧详解
  4. ffmpeg rtmp 不清晰_知识储备:理解RTMP、HttpFlv和HLS的正确姿势
  5. 32. Longest Valid Parentheses 最长有效括号
  6. android 启动器开发,Android启动器(Launcher)开发详解
  7. 最简单的模拟U盘病毒(Autorun.inf)
  8. HTML学习笔记:iframe框架演示
  9. 记一次oracle安装错误:INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'...
  10. python reportlab
  11. gitHub官网访问慢的问题
  12. 原型图设计软件哪个好用?6款好用软件推荐
  13. win7修改网络计算机名字,Win7系统中不能修改计算机名字是怎么回事?
  14. 程序设计思维 A - 区间选点 II(差分约束)
  15. PyTorch笔记【1】---A卡安装(RX580)无果后,改为N卡(2070)安装。这年头就不要用CPU了来搞AI了
  16. mysql 值很少的索引_关于 Mysql 字段值分布很少的字段要不要加索引的问题.
  17. 自动化测试面试题及答案大全(5)
  18. SpringCloud + Gateway + Nacos, 服务注册在Nacos后,出现nacos后台服务列表有时候刷不出来服务,导致服务失效。
  19. SylixOS 共用中断号机制
  20. React中遇到的Bug——Unhandled Rejection (Error): Maximum update depth exceeded. This can happen when a com

热门文章

  1. VC里的project panel窗口如何实现(转载)
  2. Unity 如何修改 particle system 的 start color 属性
  3. 51nod 1680区间求和 (dp+树状数组/线段树)
  4. Python学习笔记(迭代、模块扩展、GUI 、编码处理等)
  5. 嘿,我这里有一个 Survey!
  6. CYYMysql 源码解读 2
  7. Sentinel服务熔断Ribbon环境预说_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0048
  8. Maven异常总结002---nexus服务器启动失败wrapper | The nexus service was launched, but failed to start.
  9. [Caffe]:关于 Error parsing text-format Caffe.NetParameter: xxx.xx : Expected interger or identifier.
  10. Bezier曲线扫盲