🌻🌻 目录
- [一、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;