[学习笔记] Oracle数据库基础之Oracle入门(一)

# 学习 # · 2021-03-02

初识Oracle

1、Oracle介绍:

(1)Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的C/S或B/S体系结构的数据库之一。

(2)Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库, 它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

2、Oracle数据库的主要特点:

(1)支持多用户、大事务量的事务处理。

(2)在保持数据安全性和完整性方面性能优越。

(3)支持分布式数据处理。将分布在不同物理位置的数据库用通信网络连接起来,在分布式数据库管理系统的控制下,组成一个逻辑上统一的数据库,完成数据处理任务。

(4)具有可移植性,Oracle可以在多个操作系统平台上使用。

3、Oracle的主要组件:

4、Oracle基本概念:

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

(2)实例:一个Oracle 实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构

(Memory Structures)组成。一个数据库可以有n 个实例。

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

(4)表空间:表空间是Oracle 对物理数据库上相关数据文件(ORA 或者DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每 个数据库至少有一个表空间(称之为system 表空间)。每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件 只能属于一个表空间。

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

(6)控制文件(ctl):是一个二进制文件。控制文件中储存数据文件和日志文件的名称和位置。

(7)日志文件(log):记录了数据的所有更改信息,并提供了一种数据恢复机制。

(8)模式和模式对象:模式是数据库对象(如表、索引等,也称模式对象)的集合。Oracle会为每一个数据库用户创建一个模式,此模式为当前用户所拥有,和用户具有相同的名称。

5、安装Oracle 11g:

(1)步骤一:下载Oracle 11g安装包,并启动安装程序。

(2)在系统类中选择“桌面类”。

(3)配置Oracle安装目录,并设置全局数据库名、管理口令。

(4)等待自动安装Oracle产品。

(5)进度条完成后,在弹出的窗口选择“口令管理”。

(6)将sys和system的用户密码重新设置,将sh和scott账号的勾去掉 并重新设置密码。

(7)安装完成。

(8)访问Database Control orcl,进入Oracle控制台。

6、在Windows下启动数据库:在Windows中,Oracle的每个实例都作为一项服务来启动。

(1)OracleService <SID>:数据库服务。

(2)OracleOraDb11g_hom1TNSListener :数据库监听服务。

(3)OracleDBConsole <SID>:企业管理器服务。

7、配置数据库:客户端与服务器进行数据访问,必须进行网络连接配置。

(1)步骤一:在Oracle服务器端配置监听器(LISTENER)。

(2)步骤二:客户端需要配置一个本地网络服务名(TNSNAME)。

(3)步骤三:监听连接请求。

8、连接数据库:

(1)使用SQL Plus连接数据库:

(2)使用PL/SQL Developer连接数据库:

(3)使用Navicat连接数据库:

9、Oracle中SYS和SYSTEM用户的区别:

(1)SYS用户:Oracle的一个超级用户,主要用来维护系统信息和管理实例,只能以SYSDBA或SYSOPER角色登录。

(2)SYSTEM用户:Oracle默认的系统管理员,拥有DBA权限,通常用来管理Oracle数据库的用户、权限和存储等,只能以Normal方式登录。

(3)SYS和SYSTEM用户都是Oracle的系统用户,都使用SYSTEM表空间,SYS拥有更大的权限。


Oracle数据类型

1、字符数据类型:

(1)char:储存固定长度的字符串。

(2)varchar2:储存可变长度的字符串。

(3)nchar和nvarchar:储存Unicode字符集类型。

2、数值数据类型:

(1)number:储存整数和浮点数,格式为:

/*
 * 基本语法
 * p为精度,表示数字的有效位数,在1~38之间
 * 有效位数:从左边第一个不为0的数算起,小数点和负号不计入有效位数
 * s为范围,表示小数点右边数字的位数,它在-84~+127之间
 * 规则:首先精确到小数点右边s位,并四舍五入。如果精确后值的有效位数≤p,则正确
 */
NUMBER(p,s)

3、日期时间数据类型:

(1)date:储存日期和时间数据。

(2)timestamp:秒值精确到小数点后6位。

4、LOB数据类型:“大对象”数据类型。Oracle中的表可以有多个LOB列,每个LOB列可以是不同的LOB类型。

(1)BLOB:储存二进制对象。如图像、视频剪辑和声音剪辑。

(2)CLOB:储存字符格式的大型对象。如非结构化的XML文档、新闻、内容介绍等。

(3)BFILE:将二进制数据储存操作系统文件中。

(4)NCLOB:储存大的NCHAR字符数据。

5、Oracle中的伪列:Oracle中伪列就像一个表列,但是它并没有存储在表中。伪列可以从表中查询,但不能插入、更新和删除它们的值。

(1)rowid:通常情况下,rowid值可以唯一地标识数据库中的一行。rowid能以最快的方式访问表中的一行,能显示表的行是如何储存的,可以作为表中行的唯一标识。

select rowid,eName from scott.emp where eName=`SMITH`;

(2)rownum:rownum伪类返回一个数值代表行的次序。通过ROWNUM可以限制查询返回的行数。

select emp.*,rownum from scott.emp where ROWNUM<11

SQL语言简介

1、数据定义语言(DDL):create、alter、drop、truncate。

(1)create table命令:创建新表。

/*
 * 基本语法
 * schema:对象所有者,即模式名称
 * table:表的名称
 * column:列的名称
 * datatype:该列的数据类型及其宽度
 * 注意:创建表时,需要指定唯一的表名称、表内唯一的列名称、列的数据类型及其宽度
 */
crete table [schema.].table (column datatype [, column datatype [, ...]]);
 
crete table stuInfo (stuNo CHAR(6) NOT NULL, stuName VARCHAR2(20) NOT NULL);

(2)truncate table命令:删除表中记录,不删除表的结构。

truncate table <tablename>;

2、数据操纵语言(DML):insert、update、delete、select。

(1)选择无重复的行:要防止选择重复的行,可以在select命令中包含distinct子句。

/* 不重复显示所有学员的姓名和年龄 */
select distinct stuName,stuAge from stuInfo;

(2)带条件和排序的select命令:

/* 按照姓名升序排序,如果姓名相同,则按照年龄降序排序 */
select stuNo,stuName, stuAge from stuInfo
where stuAge>17
order by stuName asc, stuAge desc;

(3)使用列别名:如果列明中指定含有特殊字符(如空格)的列标题,则使用双引号括起来。

/* 使用别名显示姓名、年龄和身份证号 */
select stuName as "姓 名",stuAge as "年龄", stuID as 身份证号
from StuInfo;

(4)利用现有的表创建新表:可以把现有的表中的所有记录复制到新表中,也可以仅复制选定的列或只复制结构而不复制记录。

/*
 * 基本语法
 */
create table <newtable> as
    select { * | column(S) }
    from <oldtable> [where <condition>]

/* 创建newInfo表,完全复制stuInfo */
create table newInfo as
    select * from StuInfo;

/* 创建newInfo表,只复制stuInfo表结构和姓名、年龄的所有记录 */
create table newInfo as
    select stuName,stuAge from StuInfo; 

/* 创建newInfo表,只复制stuInfo表结构 */
create table newInfo as
    select * from StuInfo where 1=2;

(5)查看表中行数:

select count(*) from stuInfo;
select count(1) from stuInfo;

(6)取出stuName、stuAge列不存在重复数据的记录:

select stuName,stuAge from stuInfo
    group by stuName,stuAge
    having(count(stuAge||stuAge) <2);

(7)删除stuName、stuAge列重复的行(保留一行):

delete from stuInfo where rowid not in(
    select MAX(rowid) from stuInfo
        group by stuName,stuAge
        having(count(stuAge||stuAge)>1)
    union
    select max(rowid) from Stuinfo
        group by stuName,stuAge
    having(count(stuAge||stuAge)=1)
);

(8)查看当前用户所有数据量>100万的表的信息:

/* user_all_tables为系统提供的数据视图,可获得当前用户表的描述 */
select * from user_all_tables a where a.num_rows>1000000;

3、事务控制语言(TCL):commit、savepoint、rollback。

(1)commit:提交事务,即把事务中对数据库的修改进行永久保存。

(2)rollback:回滚事务,即取消对数据库所作的任何修改。

(3)savepoint:在事务中创建储存点。

(4)rollback to <SavePoint_Name>:将事务回滚到储存点。

(5)何时开启事务:事务在上一次事务结束后,数据“第一次”被修改时自动开启。

(6)何时结束事务:数据被提交时或数据被撤销。

4、数据控制语言(DCL):grant、revoke。


SQL操作符

1、算数操作符:+(加)、-(减)、*(乘)、/(除)。

2、比较运算符:=、!=、<、>、<=、>=、BETWEEN、AND(检查是否在两个值之间)、IN(与列表中的值相匹配)、LIKE(匹配字符模式)、IS NULL(检查是否为空)。

3、逻辑操作符:and(与)、or(或)、not(非)。

4、集合操作符:

(1)union(联合):返回两个查询选定的所有不重复行。

(2)union all(联合所有):合并两个查询选定的所有行,包括重复行。

(3)intersect(交集):只返回两个查询都有的行。

(4)minus(减集):只返回在第一个查询选定而未被第二个查询选定的行。

5、连接操作符(||):用于将两个或多个字符串合并成一个字符串,或者将一个字符串与一个数值合并在一起。


SQL函数

1、Oracle将函数大致划分为单行函数、聚合函数和分析函数。

2、转换函数:

(1)to_char(日期 | 数字 [, 指定日期或数字的格式]):格式化显示。

/* 根据格式模型中指定的格式来显示日期 */
select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') from dual;
结果:2021年3月2日 11:12:13

/* 将数值转换为字符串 */
select to_char(1210.7, '$9,999.00') from dual;
结果:$1,210.70

(2)to_date(char [, 指定字符的形式]):将字符串类型的日期数据转化为日期类型的数据。

select to_date('2021-03-02' , 'yyyy-mm-dd') from dual;

(3)TO_NUMBER():将包含数字的字符串转换为NUMBER数据类型。

select sqrt(to_number('100')) from dual;

3、其他函数:

(1)nvl(exp1, exp2):如果exp1的值为NULL,则返回exp2的值,否则返回exp1的值。

(2)nel2(exp1, exp2, exp3):如果exp1的值为NULL,则返回exp3的值,否则返回exp2的值。

(3)decode(value, if1, then1, if2, then2, ..., else):如果value的值为if1,则返回than1的值;如果value2的值为if2,则返回then2的值,否则返回else的值。

4、分析函数:

(1)分析函数的语法:

/**
 * 基本语法
 * 函数名标识分析函数的名称
 * 参数表示函数需要传入的参数
 * 分区子句(PARTITION BY)表示将查询结果分为不同的组
 * 排序子句(ORDER BY)表示将每个分组进行排序
 */
函数名 ([参数]) OVER( [分区子句] [排序子句] )

(2)row_number函数:返回一个唯一的值,当遇到相同数据时,排名按照记录集中记录的顺序依次递增。

(3)sense_rank函数:返回一个唯一的值,当遇到相同数据时,所有相同数据的排名都是一样的。

(4)rank函数:返回一个唯一的值,当遇到相同数据时,所有相同数据的排名是一样的,同时会在最后一条相同记录和吓一跳不同记录的排名之间空出排名。

如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/232/

评论