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;
相关推荐
rzl026 分钟前
java web5(黑马)
java·开发语言·前端
jingling55518 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
guojl25 分钟前
深度解读jdk8 HashMap设计与源码
java
guojl30 分钟前
深度解读jdk8 ConcurrentHashMap设计与源码
java
m0_6873998437 分钟前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言
萧曵 丶1 小时前
Rust 中的返回类型
开发语言·后端·rust
HGW6891 小时前
基于 Elasticsearch 实现地图点聚合
java·elasticsearch·高德地图
hi星尘1 小时前
深度解析:Java内部类与外部类的交互机制
java·开发语言·交互