Oracle数据库
Oracle简介
- Oracle(甲骨文)公司
- 1977年,三人合伙创办( Software Development Laboratories ,SDL)
- 1979年,更名为Relational Software Inc. ,RSI
- 1983年,为了突出核心产品,RSI更名为Oracle
- 2002年04月26日,启用“甲骨文”作为中文注册商标
- Oracle数据库管理系统
- Oracle公司的核心产品
- 目前最流行的数据库
- 主要版本Oracle8i/9i(internet)、Oracle10g/11g(grid)
- 基于C/S系统结构
Oracle主要组件
Oracle基本概念
-
表空间
-
全局数据库名
- 用于区分一个数据库的内部标识
- 全局数据库名=数据库名+域名
- 使数据库的取名在整个网络环境在唯一
-
模式和模式对象
- 模式为模式对象的集合
- 每一个用户对应一个模式
- 模式对象是用户拥有的对象
- 非模式对象与用户无关,如表空间
安装Oracle
安装注意事项
- 选择安装目录最好是非系统磁盘
- 安装时可以直接创建数据库,也可以选择不创建
- 服务器的主机名不能有特殊字符
- 如果在创建数据库阶段提示错误,继续安装
PS:输入的数据库口令最好记录在记事本中,以免使用时忘记
启动、配置和链接数据库
-
启动数据库服务
- 通过选择打开“服务”窗口,可以看到Oracle服务
- OracleService< SID> :数据库服务
- OracleOraDb11g_home1TNSListener :数据库监听服务
- OracleDBConsole< SID> :企业管理器服务
- 通过选择打开“服务”窗口,可以看到Oracle服务
-
配置客户端网络服务
-
服务器端配置监听器
-
客户端配置网络服务名
-
注意:
- 在安装服务器软件时自动配置一个监听器
- Oracle中的 Net Manager 工具和Net Configuration Assistant都能用来配置监听器和网络服务名(建议使用Net Manager工具)
-
-
每个数据库都有SYS和SYSTEM两个默认用户,都具有创建用户权限(连接数据库)
-
SYS和SYSTEM用户、
-
SYS和SYSTEM用户都是Oracle的系统用户,都使用SYSTEM表空间,SYS拥有更大的权限
SYS用户 SYSTEM用户 地位 Oracle的一个超级用户 Oracle默认的系统管理员,拥有DBA权限 作用 主要用来维护系统信息和管理实例 通常用来管理Oracle数据库的用户、权限和存储等 登录身份 只能以SYSDBA或SYSOPER角色登录 只能以Normal方式登录
-
-
通过SQL*Plus方式连接
-
通过PL/SQL Develop而方式连接
-
-
使用SYSTEM用户登录ORCL数据库
数据类型
数据类型 | 描述 | |
---|---|---|
字符数据类型 | CHAR | 存储固定长度的字符串 |
VARCHAR2 | 存储可变长度的字符串 | |
NCHAR和NVARCHAR2 | 存储Unicode字符集类型 | |
数值数据类型 | NUMBER | 存储整数和浮点数,格式为NUMBER(p,s) |
日期时间数据类型 | DATE | 存储日期和时间数据 |
TIMESTAMP | 秒值精确到小数点后6位 | |
LOB数据类型 | BLOB | 存储二进制对象 |
CLOB | 存储字符格式的大型对象 | |
BFILE | 将二进制数据存储操作系统文件中 |
PS:不建议使用VARCHAR、INTEGER、FLOAT、DOUBLE等类型
-
Oracle中伪列就像一个表列,但是它并没有存储在表中
-
伪列可以从表中查询,但不能插入、更新和删除它们的值
-
常用的伪列有ROWID和ROWNUM
-
ROWID时表中行的存储地址,该地址可以唯一地标识数据库中一行,可以使用ROWID伪列快速地定位表中的一行
- ROWID格式
AAAR3s(数据对象编号) AAE(文件编号) AAAACX(块编号) AAA(行编号)
- ROWID格式
-
ROWNUM是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数
/*使用ROWNUM从EMP表中提取10条记录并显示序号*/ SELECT emp.*,rownum FROM Scott.emp WHERE ROWNUM < 11;
-
SQL简介
-
数据定义语言
/*创建stuInfo表*/ CREATE TABLE stuInfo( stuNo NUMBER(8), stuName VARCHAR2(100), stuAge NUMBER(4) ) /*添加字段*/ ALTER TABLE stuInfo ADD(stuSex bit); /*添加字段*/ ALTER TABLE stuInfo DROP(stuSex bit); /*添加字段*/ ALTER TABLE stuInfo MODIFY(stuName VARCHAR2(20)); /*删除stuInfo表*/ DROP TABLE stuInfo; /*删除stuInfo表,保留表结构*/ TRUNCATE TABLE stuInfo;
-
数据操纵语言
/*不重复显示所有学员姓名和年龄*/ SELECT IDSTINCT stuName,stuAge FROM stuInfo; /*按照姓名升序(ASC),如果姓名相同按照年龄降序(DESC)排序*/ SELECT stuNo,stuName,stuAge FROM stuInfo WHERE stuAge > 17 ORDER BY stuName ASC,stuAge DESC; /*使用别名显示姓 名、年 龄(含有特殊字符【如空格】加双引号)和身份证号列*/ SELECT stuName as "姓 名",stuAge as "年 龄",stuID as 身份证号 FROM StuInfo; /*利用现有表创建新表*/ /*选择所有数据*/ CREATE TABLE newStuInfo1 AS SELECT * FROM stuInfo; /*选择指定的列所有数据*/ CREATE TABLE newStuInfo2 AS SELECT stuName,stuNo,stuAge FROM stuInfo; /*只留表结构,不留数据*/ CREATE TABLE newStuInfo3 AS SELECT stuName,stuNo,stuAge FROM stuInfo WHERE 1=2; /*查看表中行数*/ SELECT COUNT(*) FROM stuInfo;/*执行效率低*/ SELECT COUNT(1) FORM stuInfo;/*执行效率高*/ /*取出stuName,stuAge列不存在重复数据的记录*/ SELECT stuName,stuAge FROM stuInfo GROUP BY stuName,stuAge HAVING(COUNT(stuName||stuAge) < 2); /*删除stuName、stuAge列重复的行(保留一行)*/ DELETE FROM stuInfo /*获取所有重复记录的ROWID*/ WHERE ROWID NOT IN( /*查找重复的记录,只保留一条*/ SELECT MAX(ROWID) FROM stuInfo GROUP BY stuName,stuAge HAVING(COUNT(stuName||stuAge) > 1) /*合并结果集,货地所有符合条件且不重复的记录*/ UNION /*查找不重复的记录*/ SELECT MAX(ROWID) FROM stuInfo GROUP BY stuName,stuAge HAVING(COUNT(stuName||stuAge) = 1) );
-
事务控制语言
-
用于事务控制的语句
-
COMMIT
-
ROLLBACK
-
SAVEPOINT
-
ROLLBACK TO < SavePoint_Name>
INSETR INTO dept VALUES(50,'a',null); INSETR INTO dept VALUES(60,'b',null); SAVEPOINT a; INSETR INTO dept VALUES(70,'c',null); ROLLBACK TO SAVEPOINT a; COMMIT; SELECT * FROM dept; /*结果为包含 50、60的记录*/
-
-
-
数据控制语言
/*直接给用户赋予权限*/ GRENT create table,create session,create sequence,create view TO SCOTT; /*赋予全部的权限:dba它具有管理员全部权限*/ GRENT dba to SCOTT; /*创建一个角色,然后为角色赋予权限*/ CREATE ROLE user; GRENT create table,create session,create sequence,create view TO user; /*将角色赋予用户*/ GRENT user to SCOTT; /*分配表的查询权限*/ GRENT select ON stuInfo TO scott; /*如果想多加权限那么就用逗号,隔开,也可以分配所有的权限(所有All)*/ GRENT select,insert ON stuInfo TO SCOTT; GRENT all ON stuInfo TO SCOTT; /*with grant option使用户同样具有分配权限的权利*/ GRENT select,insert ON stuInfo TO SCOTT WITH GRENT OPTION; /*向数据库中所有用户分配权限*/ GRENT select ON stuInfo TO public; /*使用revoke撤销对象权限,也会撤销使用with grant option分配的权限*/ REVOKE select,insert ON stuInfo FROM SCOTT;
SQL操作符
- Oracle支持的SQL操作符分类
-
集合操作符
- UNION(联合)
- UNION ALL(联合所有)
- INTERSECT(交集)
- MINUS(减集)
SQL函数
-
转换函数
-
转换函数将值从一种数据类型转换为另一种数据类型
-
常用的转换函数
-
TO_CHAR()
-
TO_DATE()
-
TO_NUMBER()
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual; SELECT TO_CHAR(1210.7,'$9,999.00') FROM dual; SELECT TO_DATE('2005-12-16','yyyy-mm-dd') FROM dual; SELECT TO_NUMBER('100') FROM dual;
-
-
-
其他函数
-
转换空值函数
-
NVL
-
NVL2
-
DECODE
SELECT ename, sal+NVL(comm,0) sal1, NVL2(comm,sal+comm,sal) sal2, DECODE(to_char(hiredate,'MM'), '01','一月','02','二月', '03','三月','04','四月', '05','五月','06','六月', '下半年') mon FROM employee;
-
-
分析函数
-
分析函数根据一组行类计算聚合值
-
分析函数为每组记录返回多个行
-
以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始
- RANK:返回连续的排位,不论值是否相等
- DENSE_RANK:具有相等值的行排位相同,序数随后跳跃
- ROW_NUMBER:具有相等值的行排位相同,序号是连续的
-
语法
函数名([参数]) OVER([分区子句] [排序子句])
- 函数名:分析函数名字
- 参数:函数需要传入的参数
- 分区子句(PARTITION BY):将查询结果分为不同的组,功能类似于GROUP BY语句
- 排序子句(ORDER BY):将每个分区进行排序
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC)
-
-