Java进阶-Oracle(二十一)(2)

🌻🌻 目录

  • [一、Oracle 数据库的操作(DDL DML DQL DCL TPL)](#一、Oracle 数据库的操作(DDL DML DQL DCL TPL))
    • [1.1 标识符、关键字、函数等](#1.1 标识符、关键字、函数等)
      • [1.1.1 数值类型:](#1.1.1 数值类型:)
      • [1.1.2 字符串类型:](#1.1.2 字符串类型:)
      • [1.1.3 日期类型](#1.1.3 日期类型)
      • [1.1.4 大的数据类型--适合保存更多的数据](#1.1.4 大的数据类型--适合保存更多的数据)
    • [1.2 运算符](#1.2 运算符)
    • [1.3 函数---预定义函数、自定义函数,](#1.3 函数---预定义函数、自定义函数,)
      • [1.3.1 数值函数---进行数值操作:](#1.3.1 数值函数---进行数值操作:)
      • [1.3.2 字符串函数](#1.3.2 字符串函数)
      • [1.3.3 日期函数](#1.3.3 日期函数)
      • [1.3.4 转换函数](#1.3.4 转换函数)
      • [1.3.5 其他函数](#1.3.5 其他函数)
    • [1.4 单表多表查询](#1.4 单表多表查询)
    • [1.5 分页查询](#1.5 分页查询)

一、Oracle 数据库的操作(DDL DML DQL DCL TPL)

1.1 标识符、关键字、函数等

  • 1)标识符---数字、字母、下划线、#
  • 2)关键字
  • 3)数据类型:

1.1.1 数值类型:

  • 1) Mysql---int double
  • 1) Oracle---number:整数和小数,number(n)--整数,number(m,n)--小数,m表示小数的整体位数,n表示小数点之后的位数

1.1.2 字符串类型:

Mysql---char varchar

Oracle---char varchar2 nchar nvarchar2

char nchar -- 定长类型,向此类型的字段中添加字符串的时候,如果字符串的长度不够指定的长度,那么自动补齐空格

varchar2 nvarchar2 -- 变长类型,向此类型的字段中添加字符串的时候,不会补齐空格,添加的字符串是多长那么空间就是多长

varchar2和nvarchar2--占4000字节,通常一个数字或者一个字母对应一个字节,使用此两个类型可以保存4000个字母或者数字,在Oracle中默认三个字节一个汉字

varchar2(n) --- n表示字节个数,能放的汉字个数n/3

varchar2(n char) --- n表示汉字个数

char和nchar---占2000字节,char(n char) --- n表示汉字个数

1.1.3 日期类型

Mysql -- date datetime

Oracle -- date timestamp

1.1.4 大的数据类型--适合保存更多的数据

Mysql --- text tinytext longtext 存更多的字符串

blob longblob 存非字符串的内容,比如图片、音频等

Oracle --- clob long 存更多的字符串

blob 存非字符串的内容,比如图片、音频、视频等

1.2 运算符

A、算术运算 + - * / mod()

B、关系判断运算:> >= < <= <>/!=

C、逻辑判断运算:and or not

D、特殊运算:is null is not null like in between...and

not like not between...and

1.3 函数---预定义函数、自定义函数,

在Oracle中函数的运行需要使用标准的sql格式,在Oracle中为了补齐标准的sql,设置了一个dual的虚拟表,

聚合函数---统计函数:count() avg() sum() max() min()

单行函数:

1.3.1 数值函数---进行数值操作:

数学函数--

abs()绝对值

四舍五入round()

截取数值函数trunc()--只删除不进位

floor()--比指定数值小的最大整数

ceil()--比指定数值大的最小整数

power()

log()

1.3.2 字符串函数

字符串截取--substr()

字符串长度--length()

大写转小写lower()

小写转大写upper()

首字母大写,其他小写initcap()

字符串串联concat() ||

1.3.3 日期函数

sysdate -- 系统时间

给月份增加值add_months()

四舍五入日期round(date,'month/year')

1.3.4 转换函数

在Oracle中日期格式是:日-月-年,而且月上还有一个汉字'月',比如:14-5月-19 19年5月14日

字符串转日期

sql 复制代码
select to_date('2023-05-07','YYYY-MM-dd') from dual;

字符串转数值--to_number(数值字符串,格式字符串)

sql 复制代码
select to_number('123','9G999') from dual;
select to_number('56,023,780','999,999,999') from dual;

日期转字符串、数值转字符串to_char

sql 复制代码
SELECT to_char(sysdate,'YYYY-MM-dd') from dual;
SELECT to_char(123456789,'999,999,999') from dual;

1.3.5 其他函数

Oracle自带模板表

与null有关的函数

sql 复制代码
select nvl(comm,0) from emp;

nvl()函数,将null转成指定的值

nvl2()函数,当第一个参数值不为null时,显示第二个参数的结果,当第一个参数值为null时,显示第三个参数的结果

sql 复制代码
select nvl2(comm,sal+comm,sal) from emp;

与case when then结构有关的函数

sql 复制代码
select job,case job when 'CLERK' then '文员'
                    when 'SALESMAN' then '销售员'
                    when 'MANAGER' then '经理'
                    when 'ANALYST' then '分析员'
                    when 'PRESIDENT' THEN '总裁'
           end job1
from emp;

代替以上格式的函数

sql 复制代码
select job,decode(job,'CLERK','文员',
                      'SALESMAN','销售员',
                      'MANAGER','经理',
                      'ANALYST','分析员',
                      'PRESIDENT','总裁') job1
from emp;

1、DDL---数据库定义语言:create drop alter

2、DML---数据库操作语言:insert delete update

3、DQL---数据库查询语言:select

sql 复制代码
CREATE TABLE t_person(

	pid NUMBER(5) primary key,
	pname VARCHAR2(3 CHAR),
	psex CHAR(1),
	pbirthday DATE,
	psal NUMBER(5,2),
	pbir timestamp
);

SELECT * FROM t_person;

INSERT INTO t_person VALUES(1004,'张易得','3','1-5月-1995',333.993,SYSDATE)

1.4 单表多表查询

单表查询:简单查询、子查询、连接查询

多表查询:连接查询、子查询

sql 复制代码
 -- 查询员工中没有奖金的员工信息
SELECT * FROM EMP WHERE COMM IS NULL OR COMM = 0
sql 复制代码
-- 子查询的结果如果出现在外查询的Where部分,那么子查询的结果就是where的条件值
-- 子查询的结果如果出现在外查询的from部分,那么子查询结果就是表
--如果子查询出现在where部分,子查询结果只有一个值,那么把子查询就看作是这个值
--如果子查询出现在where部分,子查询结果是一列多个值,那么把子查询看做同类型多个值

--查询员工工资比平均工资高的员工的信息

SELECT * FROM EMP WHERE SAL > (select AVG(SAL) from EMP)
sql 复制代码
-- 查询Smith、allern同部门的其他员工信息

select DEPTNO from EMP where  ENAME = 'SMITH' OR ENAME = 'ALLEN';

SELECT * FROM EMP 
WHERE DEPTNO IN (select DEPTNO from EMP where  ENAME = 'SMITH' OR ENAME = 'ALLEN') 
AND  ENAME <> 'SMITH' AND ENAME <> 'ALLEN';
sql 复制代码
--查询每位员工姓名以及领导的姓名

SELECT * from  emp e,emp m where e.empno = m.mgr(+)   --(+)ORACLE 特有的加上相当于左查询
 
SELECT * from  emp e LEFT JOIN emp m ON e.empno = m.mgr  --左查询

1.5 分页查询

  • 在Oracle中实现分页,没有limit关键字
  • rowid保证表中数据的唯一性
  • Rownum是查询结果的行号
  • 分页实现

-- 第一页,每页4个,行号从1到4

sql 复制代码
select empno,ename,job,mgr,hiredate,sal,comm,deptno
from (select rownum r,emp.* from emp) te
where te.r between 1 and 4;
相关推荐
儿时可乖了4 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
ruleslol5 分钟前
java基础概念37:正则表达式2-爬虫
java
I_Am_Me_11 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子21 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
xmh-sxh-131422 分钟前
jdk各个版本介绍
java
Ai 编码助手23 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z27 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹34 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE35 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
天天扭码41 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构