🌻🌻 目录
- 一、Oracle 数据库的操作(DDL DML DQL DCL TPL)
- 1.1 标识符、关键字、函数等
- 1.1.1 数值类型:
- 1.1.2 字符串类型:
- 1.1.3 日期类型
- 1.1.4 大的数据类型--适合保存更多的数据
- 1.2 运算符
- 1.3 函数---预定义函数、自定义函数,
- 1.3.1 数值函数---进行数值操作:
- 1.3.2 字符串函数
- 1.3.3 日期函数
- 1.3.4 转换函数
- 1.3.5 其他函数
- 1.4 单表多表查询
- 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日
字符串转日期
select to_date('2023-05-07','YYYY-MM-dd') from dual;
字符串转数值–to_number(数值字符串,格式字符串)
select to_number('123','9G999') from dual;
select to_number('56,023,780','999,999,999') from dual;
日期转字符串、数值转字符串to_char
SELECT to_char(sysdate,'YYYY-MM-dd') from dual;
SELECT to_char(123456789,'999,999,999') from dual;
1.3.5 其他函数
Oracle自带模板表
与null有关的函数
select nvl(comm,0) from emp;
nvl()函数,将null转成指定的值
nvl2()函数,当第一个参数值不为null时,显示第二个参数的结果,当第一个参数值为null时,显示第三个参数的结果
select nvl2(comm,sal+comm,sal) from emp;
与case when then结构有关的函数
select job,case job when 'CLERK' then '文员'
when 'SALESMAN' then '销售员'
when 'MANAGER' then '经理'
when 'ANALYST' then '分析员'
when 'PRESIDENT' THEN '总裁'
end job1
from emp;
代替以上格式的函数
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
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 单表多表查询
单表查询:简单查询、子查询、连接查询
多表查询:连接查询、子查询
-- 查询员工中没有奖金的员工信息
SELECT * FROM EMP WHERE COMM IS NULL OR COMM = 0
-- 子查询的结果如果出现在外查询的Where部分,那么子查询的结果就是where的条件值
-- 子查询的结果如果出现在外查询的from部分,那么子查询结果就是表
--如果子查询出现在where部分,子查询结果只有一个值,那么把子查询就看作是这个值
--如果子查询出现在where部分,子查询结果是一列多个值,那么把子查询看做同类型多个值
--查询员工工资比平均工资高的员工的信息
SELECT * FROM EMP WHERE SAL > (select AVG(SAL) from EMP)
-- 查询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';
--查询每位员工姓名以及领导的姓名
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
select empno,ename,job,mgr,hiredate,sal,comm,deptno
from (select rownum r,emp.* from emp) te
where te.r between 1 and 4;