Oracle—学习笔记#day01

Oracle

Posted by DiCaprio on August 16, 2019

目录

一、 oracle 介绍[ 了解]

二、oracle安装

三、Oracle 体系结构[ 理解]

1.  数据库

2.  实例

3.  用户

4.  表空间

5.  数据文件(dbf 、ora )

四、 创建表空间[ 理解]

五、 用户[理解]

创建用户

用户赋权限

六、 Oracle 数据类型[ 应用]

七、 表的管理[ 应用]

建表

表删除

表的修改

数据库表数据的更新

INSERT (增加)

UPDATE (修改)

DELETE(删除)

序列

八、 Scott 用户下的表结构[ 了解]

九、 单行函数[ 应用]

字符函数

数值函数

日期函数

通用函数

十、 多行函数( 聚合函数)

统计记录数 count()

最小值查询 min()

最大值查询 max()

查询平均值 avg()

求和函数 sum()

十一、 分组统计

十二、 多表查询[ 应用]

多表连接基本查询

外连接(左右连接)

十三、 子查询[应用]

十四、 Rownum 与分页查询[ 应用]


一、 oracle 介绍[ 了解]

ORACLE 数据库系统是美国ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S体系结构的数据库之一。比如SilverStream 就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了 ORACLE知识,便能在各种类型的机器上使用它。

二、oracle安装

三、Oracle 体系结构[ 理解]

1.  数据库

Oracle 数据库是数据的物理存储。这就包括(数据文件ORA或者 DBF、控制文件、联机日志、参数文件)。其实Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle 就只有一个大数据库

2.  实例

一个 Oracle 实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。

3.  用户

用户是在实例下建立的。不同实例可以建相同名字的用户。

mysql可以说某个数据库下存在多少张表,而oracle不行,只能说某个用户下存在多少张表

4.  表空间

表空间是 Oracle 对物理数据库上相关数据文件(ORA或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空间)。

每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。

5.  数据文件(dbf 、ora )

数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

注: 表的数据,是由用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。

由于 oracle 的数据库不是普通的概念,oracle 是由用户和表空间对数据进行管理和存放的
但是表不是由表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!

 

四、 创建表空间[ 理解]

表空间? ORACLE数据库的逻辑单元。 数据库---表空间 一个表空间可以与多个数据文件(物理结构)关联
一个数据库下可以建立多个表空间,一个表空间可以建立多个用户、一个用户下可以建立多个表。

  1. create tablespace itcast
  2. datafile 'c:\itcast.dbf'
  3. size 100m
  4. autoextend on
  5. next 10m

itcast 为表空间名称
datafile 指定表空间对应的数据文件
size 后定义的是表空间的初始大小
autoextend on 自动增长 ,当表空间存储都占满时,自动增长
next 后指定的是一次自动增长的大小

五、 用户[理解]

创建用户

  1. create user itcastuser
  2. identified by itcast
  3. default tablespace itcast

identified by 后边是用户的密码
default tablespace 后边是表空间名称
oracle 数据库与其它数据库产品的区别在于,表和其它的数据库对象都是存储在用户下的。

用户赋权限

新创建的用户没有任何权限,登陆后会提示,即无法登录

Oracle 中已存在三个重要的角色:connect 角色,resource角色,dba角色。
CONNECT 角色: --是授予最终用户的典型权利,最基本的
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE 角色: --是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
DBA角色:拥有全部特权,是系统最高权限,只有 DBA才可以创建数据库结构,并且系统权限也需要DBA授出,且 DBA用户可以操作全体用户的任意基表,包括删除

grant dba to itcastuser

进入 system 用户下给用户赋予 dba 权限,否则无法正常登陆

切换到新创建的用户下

退出管理员用户

重新登录

六、 Oracle 数据类型[ 应用]

七、 表的管理[ 应用]

建表

  1. Create table 表名(
  2. 字段 1 数据类型 [default 默认值],
  3. 字段 2 数据类型 [default 默认值],
  4. ...
  5. 字段 n 数据类型 [default 默认值]
  6. );
  7. 范例:创建 person表
  8. create table person(
  9. pid number(10),
  10. name varchar2(10),
  11. gender number(1) default 1,
  12. birthday date
  13. );
  14. insert into person(pid, name, gender, birthday)
  15. values(1, '张三', 1, to_date('1999-12-22', 'yyyy-MM-dd'));

表删除

语法:DROP TABLE 表名

表的修改

  1. 在 sql中使用 alter 可以修改表
  2. 添加语法:ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型
  3. [DEFAULT 默认值]...)
  4. 修改语法:ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
  5. [DEFAULT 默认值]...)
  6. 修改列名: ALTER TABLE 表名称 RENAME 列名 1 TO 列名 2
  7. 范例:在 person 表中增加列 address
  8. alter table person add(address varchar2(10));
  9. 范例:把 person 表的address 列的长度修改成 20 长度
  10. alter table person modify(address varchar2(20));

数据库表数据的更新

更新后要进行提交事务commit;

INSERT (增加)

  1. 标准写法:
  2. INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)
  3. 简单写法(不建议)
  4. INSERT INTO 表名 VALUES(值 1,值 2,...)
  5. 注意:使用简单的写法必须按照表中的字段的顺序来插入值,而且如果有为空的字段使用 null
  6. insert into person
  7. values(2,'李四',1,null,'北京育新');

UPDATE (修改)

全部修改:UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....
局部修改:UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;

DELETE(删除)

语法 : DELETE FROM 表名  WHERE 删除条件;
在删除语句中如果不指定删除条件的话就会删除所有的数据
因为 oracle 的事务对数据库的变更的处理,我们必须做提交事务才能让数据真正的插入到数
据库中,在同样在执行完数据库变更的操作后还可以把事务进行回滚,这样就不会插入到数据
库。如果事务提交后则不可以再回滚。
提交:commit
回滚:rollback

序列

  1. 在很多数据库中都存在一个自动增长的列,如果现在要想在 oracle 中完成自动增长的功能,
  2. 则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。
  3. 语法:CREATE SEQUENCE 序列名
  4. [INCREMENT BY n]
  5. [START WITH n]
  6. [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
  7. [{CYCLE|NOCYCLE}]
  8. [{CACHE n|NOCACHE}];
  9. 范例:创建一个 seqpersonid的序列,验证自动增长的操作
  10. CREATE SEQUENCE seqpersonid;
  11. 序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:
  12. nextval :取得序列的下一个内容
  13. currval :取得序列的当前内容
  14. select seqpersonid.nextval from dual;
  15. select seqpersonid.currval from dual;
  16. 在插入数据时需要自增的主键中可以这样使用

在实际项目中每一张表会配一个序列,但是表和序列是没有必然的联系的,一个序列被哪一张表使用都可以,但是我们一般都是一张表用一个序列。
序列的管理一般使用工具来管理。

八、 Scott 用户下的表结构[ 了解]

解锁需要有超级管理员dba权限

九、 单行函数[ 应用]

作用于一行,返回一个值。

字符函数

数值函数

四舍五入函数:ROUND()
默认情况下 ROUND 四舍五入取整,可以自己指定保留的位数。

日期函数

Oracle 中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律
日期 – 数字 = 日期
日期 + 数字 = 日期
日期 – 日期 = 数字
1. 范例:查询雇员的进入公司的周数。
分析:查询雇员进入公司的天数(sysdate – 入职日期)/7就是周数

通用函数

十、 多行函数( 聚合函数)

作用于多行,返回一个值。

统计记录数 count()

最小值查询 min()

最大值查询 max()

查询平均值 avg()

求和函数 sum()

十一、 分组统计

分组统计需要使用 GROUP BY来分组
语法:语法:SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段} ORDER BY 列
名 1 ASC|DESC,列名 2...ASC|DESC

十二、 多表查询[ 应用]

多表连接基本查询

外连接(左右连接)

使用(+)表示左连接或者右连接,当(+)在左边表的关联条件字段上时是左连接,如果是在右边表的关联条件字段上就是右连接。

范例:查询出所有员工的上级领导
分析:我们发现使用我们以前的做法发现 KING 的上级领导没有被展示,我们需要使用左
右连接把他查询出来

十三、 子查询[应用]

子查询:在一个查询的内部还包括另一个查询,则此查询称为子查询。
Sql的任何位置都可以加入子查询。
范例:查询比 7654工资高的雇员
分析:查询出 7654员工的工资是多少,把它作为条件

十四、 Rownum 与分页查询[ 应用]

  1. 但是我们不能取到中间几行,因为rownum不支持大于号,只支持小于号,如果想 实现我们的
  2. 需求怎么办呢?答案是使用子查询,也正是oracle分页的做法。
  3. 第一种写法:
  4. select *
  5. from (select rownum rm, a.* from (select * from emp) a where rownum < 11) b where b.rm >
  6. 5
  7. 第二种写法:
  8. select *
  9. from (select rownum r ,emp.* from emp) b
  10. where b.r >5 and b.r <11