01-oracle数据库基础
文章目录
Oracle基础知识
一、Oracle主要的特点如下:
1.支持多用户、大量的事务处理。
2.在保持数据安全性和完整性的方面性能优越。
3.支持分布式处理。
4.具有可移植性。
二、安装教程博客地址:打开浏览器查看教程
三、sqlplus操作oracle数据库
-
在命令行输出
services.msc
打开系统服务 -
把
oracleServletXXXX
(X代表自己的全局用户名)设置为手动 -
启动服务(设置为手动后以后要用的时候再打开)
-
进入
sqlpuls
操作系统-
system/linux – 用户名/密码
- scott/12345
-
如果
scott
账户锁住 ,用sys
账户登录,密码为设置的全局密码。alert user scott account unlock
-
修改密码
passw scott
– 表示修改scott用户的密码
四、PLSQL Develper的安装使用
- PLSQL Develper是荷兰的一家公司研发的
- 收费,常用的Oracle客户端工具
- PLSQL Develper的安装和使用 使用之前重新配置一下监听
- 启动监听服务 dad
-
[li] NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Oracle数据类型
一、字符数据类型
-
char
字节数,定长。 -
varchar2
字节数 -
nchar
字符数 -
nvarchar2
字符数官方推荐varchar2,是varchar进阶。同理nvarchar2是nvarchar的进阶
var和无var的区别,var表示可变长度,自动调节
一般而言纯英文推荐
char和
varchar,中文推荐
nchar,
nvarchar。
二、数值类型
1. number(p,s)
p为精度,从左边第一个不为0的数开始算。
s为范围,表示几位小数。
- 案例: number(4,2) ➡️ 123.89 –> 报错 (有效数字为5,超过了4为)
- number(4,2) ➡️ 12.789 –> 12.79
- number(3,4) ➡️ 1 –> 报错(1.0000)超过了3位有效数
- number(3,4) ➡️ 0.0001 –> 0.0001
- number(3,4) ➡️ 0.1 –> 报错(0.1000) 超过了3位有效数
三、日期类型
a、date(储存年月日时分秒)
b、timestamp(精确到毫秒,可以精确的判断两条数据的插入先后)
c、查看当前系统时间:
select sys from dual
四、LOB数据类型(Large Object)
a、CLOB: 大文本,大量字符数据(常用)
b、BLOB: 大的二进制对象,图形,视频等等
c、BFILE: binary lob,储存一个二进制文件应用,文件存在操作系统之中
d、NCLOB: Unicode格式的CLOB.
Oracle语言简介
一、SQL语言基本概念
DDL
数据定义语言:create,alert,truncate(截断),drop 👀 命令DML
数据操作语言:insert,delete,update,select 👀 命令TCL
事务控制语言:commit,savepoint(保存点),rollback 👀 命令DCL
数据控制语言:grant(授予)和remove(移除) 👀 命令
二、Oracle常用的PLSQL语句
-
建表
create table
和mysql规则一样。 -
增删改查和mysql规则一样。
-
去重distinct ,根据查询的列如果全相同。(名字和年龄完全相同)
例如:selectdistinct
stuName,stuage from stuinfo
表复制(完全复制)
create tablenewTable
as
select列名
fromoldTable
表复制(仅表结构)
create tablenewTable
as
select列名
fromoldTable
where1=2
数据复制(列名和类型相同)
insert intonewtable
select*
fromoldtable
统计个数技巧
select count(*) from table;
select count(1) from table; ⬅️ 效率更高推荐使用
事务控制
commit: ⬅️ oracle默认开启事务需要手动提交事务。
rollback: ⬅️ 用于回滚事务。
savepoint: ⬅️ 设置保存点。
rollback to: ⬅️ 表示回滚到保存点。
insert into stuinfo values(18,'123',12,10023,15); insert into stuinfo values(18,'31',13,10023,15); savepoint p1; -- 建立回滚点 insert into stuinfo values(18,'haha',13,10023,15); rollback to p1; -- 回归到指定位置
三、Oracle中的伪列
-
伪列就像表中的某一列,但实际上它并未储存在表中。
-
伪列可以从表中查询,但是不能进行增删改。
-
rowId:唯一的标识数据库中的一行,以最快的方式访问表中的一行。
-
rownum:对于查询的每一行,rownum对返回结果进行编号,从1开始
查询前几条数据:
select * from emp where rownum < 5
-
查询第一条数据:
select * from emp where rownum = 1
-
分页查询(根据rowNum实现):
-
select * from ( select e.*,rownum rownums from emp e order by sal desc ) a where a.rownums between 5 and 9;
四、PLSQL基础操作符
1.操作算数符
+、-、*、/
2.操作算数符
=、!=、>、<、>=、<=
between….and…、in(…)、like、is null
3.逻辑算数符
and、or、not
五、PLSQL集合操作符
-
union(联合)
-
union All(联合所有)
-- union和union all 使用的条件 --作用:联合查询,是不是同一张表无所谓 ---1.查询表的列数要相同,数据类型要相同 ---2.union去重,union all不去重 select * from stuinfo where stuno in (1,2,3) union select * from stuinfo where stuno in (1,2,4)
-
intersect(交集)
-
minus(减集)
-- intersect和minus的作用 -- intersect表示查询共有的条件 -- minus表示查询不共有的条件 select * from stuinfo where stuno in (1,2,3) intersect select * from stuinfo where stuno in (1,2,4)
六、Oracle常用函数
-
to_char(): 把日期、是最转换为特定格式的字符串。== toString
to_char(55)
===> 55 to_char(55,‘99.99’)
===> 55.00to_char(sysdate,‘yyyy-MM-dd’)
===>
to_date(): 把字符串转为日期。
to_date(‘1999-08-09’,‘yyyy-MM-dd’)
to_number(): 转换为数值类型。
to_number('99')
nvl(exp1,exp2):
-
等同于
exp1 == null ? exp2 : exp1
nvl2(条件列名,第一个值,第二个值):
-
等同于
条件 == null ? 第二个值 : 第一个值
decode(列名,条件1,返回值1,条件2,返回值3,…默认值):
switch(val){ case if1: return then1; case if2: return then2; default: return else; }
常用函数API:点击这里打开查看Oracle常用函数
*七、分析函数
1.分析函数的作用和语法
分析函数名([参数]) over (partition by [根据什么分组] order by [排序名])
作用: 可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,其中partition by 为分组字段,order by 指定排序字段
2.Oracle分析函数与聚合函数的区别
分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
3.示例代码
--- 分析函数(现在简单理解为用于排名的) --- 分析函数语法:函数名([参数]) over ([分区子句] [排序子句]) -- row_number(): -- 对于部门编号进行分组,根据薪水进行从大到小排名。 select ename,deptno,sal, row_number() over(partition by deptno order by sal) "排名" from emp; -- dense_rank(): -- 对于部门编号进行分组,根据薪水进行从大到小排名。如果薪水相同进行并列排序也就是说可以有两个第一。 select ename,deptno,sal, dense_rank() over(partition by deptno order by sal) "排名" from emp; -- rank(): -- 对于部门编号进行分组,根据薪水进行从大到小排名。 -- 如果薪水相同进行并列排序。和dense_rank()的差别是两个第一的话就没有第二。是被顶替为第一的。 select ename,deptno,sal, rank() over(partition by deptno order by sal) "排名" from emp;
PLSQL注意点
1.delete、truncate、和drop的差别
相同点:都是删除移除的意思
delete和
truncate table都可以清除表数据。
drop table用于删除表。本身都用于移除。
不同点:用法不同
-
delete❌
属于DDM语言,可以回退 - 可以有删除条件
delete from 表名 where 条件
truncate table✖️
-
DDL语言,无法回退
truncate table 表名
drop table🗡
-
DDL语言,无法回退
drop table 表名
一些示例代码
-----------------------DDL语句----------------------- -----------------------DDL语句----------------------- -----------------------DDL语句----------------------- --- 1.建立表 create table employee( empno number(4,0) not null primary key, ename varchar2(10) , job varchar2(9), mgr number(4,0) , hiredate date , sal number(7,2) , comm number(7,2), deptno number(2,0) ); --- 2.创建注释 comment on table employee is '员工表'; --- 3.插入复制数据 insert into employee select * from scott.emp; --- 4.创建表复制数据结构 create table newTable as select * from oldTable; --- 5.创建表复制表结构 create table newTable as select * from oldTable where 1=2; --- 6.修改外键 alter table employee add constraint fk_depno foreign key(deptno) references dept(deptno); --- 7.修改主键 alter table employee add constraint pk_empno primary key(empno) --- 8.修改col1 由number改为varchar2类型 (不兼容的类型) alter table employee modify ( empno varchar2(20)) --- 9.修改表结构添加列 alter table employee add(empTel_no varchar2(12),empAddress varchar2(20) ); -----------------------DML语句----------------------- -----------------------DML语句----------------------- --- 1.分页,主要在于rownum select * from ( select e.*,rownum rownums from employee e order by sal desc ) a where a.rownums between 5 and 9; -----------------------常用函数----------------------- -----------------------常用函数----------------------- --- 1.to_char() == toString select to_char(50) from dual; select to_char(89.123,'$99.99') from dual; select to_char(systimestamp) from dual; --- 2.to_date() == 转换为date select to_date('19990412','yyyy-MM-dd') from dual; --- 3.to_number() == 转换为数值 select to_number('12123.213') from dual; --- 4.nvl(exp1,exp2) ---> null 读音为nvl --- 等同于:exp1 == null ? exp2 : exp1 select e.*,nvl(comm,0) from emp e; --- 4.nvl2(exp1,exp2,exp3) ---> nvl进阶 --- 等同于:exp1 == null ? exp3 : exp2 select e.*,nvl2(comm,comm,0) from emp e; --- 5.decode(colunm,if1,then1,if2,then2,...else) --- 等同于switch..case select e.*,decode(job,'CLERK',500,'MANAGER',1000,0) addSal from emp e; -----------------------后面额外附加------------------------- --- 创建序列 create sequence sequenceName; --- 查看序列 select seq_newsid.nextval from sys.dual; --- 查看所有用户序列 SELECT * FROM user_sequences; --- 查看所有序列 SELECT * FROM all_sequences;
- Oracle数据库基础学习_01
- 0基础lua学习(十七)C调用Lua----01小demo
- 黑马程序员——黑马学习日志之一 Java基础01
- JAVA学习笔记01 -- 面向对象基础
- Android文档学习01_Android基础
- JavaScript基础_01
- 01、咿呀JVM-基础howto
- 【C#基础】【语法03】课堂作业题 01-11
- Oracle数据库基础之字符串函数
- 直接定址表01 - 零基础入门学习汇编语言72
- 黑马程序员_C语言01_基础总结
- Oracle学习笔记(1) Oracle数据库编程基础
- 01 无损编码的数学基础
- IOS开发教程-01-IOS程序框架认识、XCode基础了解、MVC面向对象设计
- perl基础01
- Openstack 实战讲解之-----------01-基础环境安装
- Oracle数据库基础
- OSI七层模型与TCP/IP五层模型——以太网基础01
- 每天进步一点点------基础实验_01_多路复用器 :4通道8位带三态输出
- 前端学习之路css3(01)-基础知识