Oracle数据库

本文详细介绍了Oracle数据库,包括关系型和非关系型数据库的区别,Oracle数据库的组成部分如数据文件、控制文件、日志文件,以及Oracle的安装、目录结构、系统用户、启动和关闭流程。文章还深入探讨了Oracle的表空间、数据类型、约束、SQL语言结构、函数、多表查询、事务处理、DDL和DML操作,以及视图、索引、序列和数据导入导出等内容,是学习Oracle数据库的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle数据库

1、数据库

数据库:数据的集合。

2、数据库类型

2.1 关系型数据库

  • 数据结构是表,由二维表及其之间的联系所组成的一个数据组织,支持事务的一致性
  • 优点
    • 易于维护
    • 使用方便
    • 复杂操作
  • 缺点
    • 性能差
    • 存储方式不灵活

Oracle
Mysql
PostgreSQL
DB2
Microsoft SQL Server
Microsoft Access

2.2 非关系型数据库

  • 严格上不是一中数据库,是一种数据结构化存储方法的集合,可以是文档或者键值对。不支持事务一致性。
  • 优点
    • 格式灵活
    • 高扩展性
    • 速度快
  • 缺点
    • 不支持SQL
    • 不支持事务
    • 不支持复杂查询

Redis
Mongodb
Big Table

3、Oracle

3.1 Oracle数据库

所有的关系型数据库存储数据的集合就是磁盘中的文件。Oracle数据就是一组文件集合。Oracle分别由:数据文件、控制文件、日志文件

3.1.1 数据文件(.DBF)

在这里插入图片描述

3.1.2 控制文件(.CTL)

在这里插入图片描述

3.1.3 日志文件(.LOG)

在这里插入图片描述

3.2 Oracle实例

在这里插入图片描述
在这里插入图片描述

3.3 Oracle软件的介绍

3.3.1 Oracle 安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3.2 Oracle的目录结构

3.3.2.1 admin
  • 记录Oracle实例的配置,运行日志的文件,每个实例一个目录
  • SID:System IDentifier的缩写,是Oracle实例的唯一标记,在Oracle中一个实例只能操作一个数据库。安装了多个实例,可以通过实例SID来区分,也会使用SID来作为库的名称
3.3.2.2 cfgtoollogs

存放当前运行dbca、emca、netca等图形化配置程序时的log

3.3.2.3 checkpoints

存放检查点文件

3.3.2.4 diag

新增加的一个重组目录,将Oracle每个组件所诊断出的log文件存放在了这个目录下

3.3.2.5 flash_recovery_area(闪回区)

分配一个特定的目录位置来存放一些特定的回复文件,用于集中和简化管理数据恢复工作。闪回区可存储完全的数据文件备份、增量备份、数据文件副本、当前的控制文件、备份的控制文件、spfile文件、快照控制文件、联机日志文件、归档日志、块跟踪文件、闪回文件

3.3.2.6 oradata

存放数据文件

CONTROL01.CTL:控制文件
EXAMPLE01.DBF:表空间文件
SYSAUX01.DBF:存储除数据字典以外的其他数据对象。由系统内部自动维护
SYSTEM01.DBF:存放Oracle系统内部表和数据字典的数据,如:表名、列名、用户名
UNDOTBS01.DBF:撤销表空间文件,用来保存回滚数据
USERS01.DBF:用户表空间
TEMP01.DBF:临时表空间文件
REDO01.LOG:重做日志文件1
REDO02.LOG:重做日志文件2
REDO03.LOG:重做日志文件3

3.3.2.7 product

Oracle RDBMS的软件存放目录。RDBMS即关系数据库管理系统(Relational Database Management System)。

3.3.3 Oracle的系统用户

3.3.3.1 sys

超级用户,权限最大,可以完成数据库的所有管理任务

3.3.3.2 system

没有sys权限大,创建一些用户查看管理信息的表或视图。不建议创建一些与管理无关的表或者视图

总结:sys只能以系统管理员(sysdba)或系统操作员(sysoper)的权限登录,而system可以直接登录(normal)

3.3.3.3 scott

示例用户

3.3.4 Oracle的启动

Oracle是通过系统的服务来启动的

3.3.4.1 OracleServiceORCL

数据库服务(数据实例),数据库启动的基础

3.3.4.2 OracleOraDb11g_home1TNSListener

监听器服务,只有在数据库需要远程访问的时候或者使用PL/SQL、Developer等第三方工具时才需要

3.3.5 Oracle的关闭

OracleServiceORCL、OracleOraDb11g_home1TNSListener两者的服务停止即可

3.3.6 Oracle自带客户端工具

sys用户登录命令:sys as sysdba|sysoper
system用户登录命令:system

3.3.7 Oracle的使用

3.3.7.1 Oracle的表空间
  • 永久表空间
    表空间是数据的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表。
  • 临时表空间
    主要用来查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可释放临时表空间
3.3.7.2 创建永久表空间命令
create tablespace 永久表空间名称 datafile '永久表空间物理文件位置' size 15M autoextend on next 10M permanent online;

3.3.8 Oracle的链接配置

3.3.8.1 sqlnet.ora
  • 名称解析。通过这个文件夹来决定怎么样找一个连接中出现的连接字符串
3.3.8.2 tnsnames.ora
  • 用在oracle client端,用户配置连接数据库的别名参数

3.3.9 Oracle的数据类型

3.3.9.1 CHAR类型
  • 定长字符串,会用空格填补来达到其最大长度。最多存储2000字节的信息,不指定CHAR长度,则默认为1
3.3.9.2 VARCHAR2类型
  • 变长字符串,不会使用空格填补长度
3.3.9.3 NVARCHAR2类型
  • UNICODE格式数据的变长字符串,最多可以存储4000字节的信息
3.3.9.4 NUMBER类型
  • 可以表示整数类型,也可以表示浮点类型
3.3.9.5 INTEGER类型
  • 存储整数类型

3.4 Oracle创建表

  • 在创建表时,如果定义了特殊符号,两侧需要双引号。
  • 表明不能超过30个字符

3.4.1 数据库的约束

3.4.1.1 主键约束
  • 唯一性,非空性
3.4.1.2 唯一约束
  • 唯一性,可以空,但只能一个
3.4.1.3 检查约束
  • 对该数据的范围、格式的限制(如:年龄、性别等)
3.4.1.4 非空约束
  • 该列不允许包含空值
3.4.1.5 外键约束
  • 需要建立两表间的关系并引用主表的列

3.4.2 数据库表关系

3.4.2.1 一对多

  • 一个表中的一条数据可以对应另一个表中的多条数据,外键永远在多方,外键允许重复,允许含有空值

3.4.2.2 一对一

  • 一对一关系是建立在一对多的基础上,外键可以在任何一方,需要让外键一方具备唯一约束。

3.4.2.3 多对多

  • 需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键

4、SQL语言

4.1 SQL语言结构

4.1.1 数据查询语言(DQL)

  • SELECT、WHERE、ORDER BY、GROUP BY、HAVING

4.1.2 数据操作语言(DML)

  • INSERT、UPDATE、DELETE
  • 与事务有关

4.1.3 事务处理语言(TCL)

  • commit(事务提交)、rollback(事务回滚)、savepoint(设置回滚点)

4.1.4 数据控制语言(DCL)

  • 通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问
    • grant:授予用户权限
    • revoke:撤销用户权限

4.1.5 数据定义语言(DDL)

  • create:创建数据库对象
  • drop:删除数据库对象
  • alter:修改数据库对象
  • rename:修改数据库对象名称

4.2 DQL语言

  • SELECT *|{[DISTINCT] column|expression [alias],…} FROM table;
  • 空值是一个未分配的、未知的、或不适用的值,控制不是0,也不是空格
  • 包含空值的算术表达式计算结果为空
  • 列别名:紧跟列名后面,之间可用AS或空格分开,如果别名含有空格、特殊字符、大小写敏感,要求用双引号。

4.2.1 SELECT 语句中的算术表达式

  • 对数字可以做* / + -运算,而日期(DATE、TIMESTAMP)只能做 + - 运算
  • 运算符的优先级
    在这里插入图片描述

4.2.2 连字运算符

  • 连接列或者字符串到其他的列
  • 用两个竖线表示(||)
  • 列与列之间、列与算术表达式之间或者列与常数值之间的连接,来创建一个字符表达式。

4.2.3 文字字符串

  • 文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期
  • 日期和字符的文字字符串值必须用单引号括起来,数字不需要单引号。
  • 每个文字字符串在每行输出一次
  • 任意格式文本的文字字符串能够被包含在查询结果中
select last_name || ' is a ' || job_id as "Employee Details" from employees;

4.2.4 去除重复行

  • DISTINCT关键字是去除相同的行;如果后面有多个列的字段,是对这几个列的结果集做去重。

4.2.5 选择限制行

  • 用WHERE子句限制从查询返回的行
  • WHERE子句紧跟着FROM子句的后面
  • 条件为true,返回满足条件的行,如:WHERE 1=1;条件永远满足,所以查询的是所有数据。
  • WHERE子句由三个元素组成
    • 列名
    • 比较条件
    • 列名、常量或值列表

4.2.6 字符串和日期

  • 字符串和日期的值放在单引号中
  • 字符值区分大小写,日期值是格式敏感的
  • 日期的默认格式是 DD-MON-RR

4.2.7 比较条件

  • BETWEEN…AND…:实际上(a>=下限)AND(a<=上限),BETWEEN…AND…并没有性能的提高,只是逻辑上简单
  • IN(SET):在指定的一组值中进行选择,实际上会转变为一组OR条件:a=value1 OR a=value2 OR a=value3,IN(…)并没有得到性能的提高
  • LIKE:ESCAPE标识符搜索实际的%和_符号,如:LIKE ‘%SA_%’ ESCAPE ‘\’
select e.last_name,e.job_id from employees e where e.job_id like '%SA\_%' escape '\';
  • IS NULL:空值测试

4.2.8 优先级规则

  • 算术运算、连字操作、比较操作、IS [NOT] NULL,LIKE,[NOT] IN、[NOT] BETWEEN、NOT逻辑条件、AND逻辑条件、OR逻辑条件
    在这里插入图片描述

4.2.9 ORDER BY排序

  • ASC:升序排序,默认
  • DESC:降序排序
  • 对于空值,升序排序时显示在最后,降序显示在最前面
  • 可以使用投影的列的序号指定排序列,但是不推荐此种做法。如:order by 1;1指的是第一个列名
  • 可以使用列的别名排序
  • 可以用多列排序查询结果,多个指定的列名之间用逗号分开,如果想要对某个列倒序排序需在该列名后面指定DESC
  • SELECT语句的执行顺序如下:
    • FROM子句
    • WHERE子句
    • SELECT子句
    • ORDER BY子句

5、SQL函数

  • 能够处理查询结果的方法
  • dual是一张伪表,只有一个字段,一行记录的表

5.1 函数类型

5.1.1 单行函数

  • 对单个行进行运算,并且每行返回一个结果
  • 作用于每一个返回行,每行返回一个结果
  • 可能需要一个或多个参数
  • 可以修改结果集的数据类型
  • 可以嵌套
  • 可能返回一个与参数不同类型的数据值
  • 能够用在SELECT、WHERE和ORDER BY子句中
5.1.1.1 字符函数
  • 接受字符输入,返回字符或者数字值
    • UPPER():转化大写

    • LOWER():转化小写

    • INITCAP():每个单词的首字母转换为大写

    • CONCAT():连接值在一起

    • SUBSTR():截取子串

    • LENGTH():显示一个字符串的长度

    • INSTR():指定字符的数字位置
      在这里插入图片描述

    • LPAD():给定的字符左填充字符串到给定的长度

    • RPAD():给定的字符右填充字符串到给定的长度

    • TRIM():去除头或尾或头尾两侧的字符
      在这里插入图片描述

--去掉头尾两侧方法
select trim(both 'H' from 'HelloWorldH') from dual;

--去掉头
select trim(leading 'H' from 'HelloWorld') from dual;

--去掉尾
select trim(trailing 'H' from 'HelloWorldH') from dual;
+ REPLACE():用另外一个值替代字符串中的某个值

在这里插入图片描述

在这里插入图片描述

5.1.1.2 数字函数
  • 接受数字输入返回数字值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    • ROUND():四舍五入指定小数的值
    • TRUNC():截断指定小数的值
    • MOD():取余
5.1.1.3 日期函数
  • 对DATE数据类型的值进行运算(除MONTHS_BETWEEN函数返回一个数字,所有日期函数都返回一个DATE数据类型的值)
    • SYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间

    • 从日期加或者减一个数,结果是一个日期值

    • 两个日期相减,得到两个日期之间的天数

    • 用小时除以24,可以加小时到日期上
      在这里插入图片描述
      在这里插入图片描述

    • MONTHS_BETWEEN()
      在这里插入图片描述

    • ADD_MONTHS()
      在这里插入图片描述

    • NEXT_DAY()
      在这里插入图片描述
      在这里插入图片描述

    • LAST_DAY()
      在这里插入图片描述

    • ROUND()
      在这里插入图片描述

    • TRUNC()
      在这里插入图片描述

5.1.1.4 转换函数
  • 从一个数据类型到另一个数据类型转换一个值
5.1.1.4.1 隐式数据类型转换

在这里插入图片描述
(1)、对于直接赋值转换
在这里插入图片描述
(2)、对于表达式赋值
在这里插入图片描述
(3)、隐式转换的问题
性能影响
在这里插入图片描述
不便于阅读
在这里插入图片描述

5.1.1.4.2 显示数据类型转换

在这里插入图片描述
(1)、日期到字符的转化

  • TO_CHAR()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)、数字到字符的转化
+ TO_NUMBER()
在这里插入图片描述
在这里插入图片描述

  • TO_DATE()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
5.1.1.4.3 函数嵌套

在这里插入图片描述
在这里插入图片描述

--方法一:(推荐使用)
select to_char(next_day(add_months(e.hire_date,6),6),'DY","MM","dd","yyyy') "Next 6 Month Review" from employees e;

--方法二:
select to_char(next_day(e.hire_date,'星期五'),'DY","MM","dd","yyyy') "Next 6 Month Review" from employees e where months_between(sysdate,e.hire_date) > 6;

5.1.1.5 通用函数

在这里插入图片描述

  • 可用于任意数据类型,并且适用于空值
    • NVL():转换一个控制到一个实际的值
      在这里插入图片描述

    • NVL2():等价于三元运算符,注意:expr1、expr2、expr3的类型要一致,可以避免隐式转化带来的问题
      在这里插入图片描述
      在这里插入图片描述

    • NULLIF()
      在这里插入图片描述

    • COALSECE()
      在这里插入图片描述

5.1.1.6 条件表达式

在这里插入图片描述

  • CASE()
    在这里插入图片描述
    在这里插入图片描述
  • 示例:
    在这里插入图片描述
    在这里插入图片描述
  • DECODE()
    在这里插入图片描述
    在这里插入图片描述
  • 示例:
    在这里插入图片描述
    在这里插入图片描述

5.1.2 多行函数(组函数)

  • 又叫聚合函数

  • 操纵成组的行,每个行组给出一个结果。这些函数称为组函数。

  • 组函数可以嵌套
    在这里插入图片描述
    在这里插入图片描述

  • 组函数与单行函数区别
    在这里插入图片描述

  • 使用组函数原则
    在这里插入图片描述

  • 如果组函数,投影的列必须是分组的列

5.1.2.1 AVG 平均值

在这里插入图片描述

5.1.2.2 SUM 合计

在这里插入图片描述

5.1.2.3 COUNT 计数

在这里插入图片描述

  • COUNT(*):返回结果集的总条数
    在这里插入图片描述
  • COUNT(expr):返回在列中的由expr指定的非空值的数
  • COUNT(DISTINCT expr):使用DISTINCT关键字禁止计算在一列中的重复值
5.1.2.4 MIN/MAX 最小值/最大值

在这里插入图片描述

5.1.2.5 组函数和Null值
  • 所有组函数忽略列中的空值
  • 在组函数中使用NVL函数处理空值
SELECT avg(nvl(e.COMMISSION_PCT,0) )FROM EMPLOYEES e ;
5.1.2.6 创建数据组(GROUP BY)
  • 将查询到的结果集信息划分为较小的组,用GROUP BY子句实现
    在这里插入图片描述
    在这里插入图片描述
5.1.2.7 约束分组结果(HAVING)

在这里插入图片描述

6、SQL语句

  • 表别名:简化查询语句的长度,节省内存,在整个查询语句都可以使用表别名

6.1 多表查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 全外连接Oracle有,MySQL没有

6.1.1 多表连接

  • SQL86的语法结构
    在这里插入图片描述
    在这里插入图片描述
6.1.1.1 等值连接
  • 简单连接或内连接,是通过等号来判断连接条件中的数据值是否相匹配。
  • 抉择矩阵
    在这里插入图片描述
6.1.1.2 自连接
  • 使用一个表连接它自身的操作
SELECT e.LAST_NAME worker,m.LAST_NAME manager FROM EMPLOYEES e ,EMPLOYEES m WHERE e.MANAGER_ID = m.EMPLOYEE_ID  ;
6.1.1.3 外连接

在这里插入图片描述
在这里插入图片描述

  • SQL99外连接语法
    在这里插入图片描述

  • Oracle扩展的外连接,Oracle特有的语法格式
    在这里插入图片描述

SELECT e.LAST_NAME ,d.DEPARTMENT_NAME FROM EMPLOYEES e ,DEPARTMENTS d WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID(+) ;

在这里插入图片描述

6.1.1.4 交叉连接
  • SQL99交叉连接
    在这里插入图片描述
--笛卡尔积
--方式一:
SELECT * FROM EMPLOYEES e ,DEPARTMENTS d ;

--方式二:
SELECT * FROM EMPLOYEES e CROSS JOIN DEPARTMENTS d ;
6.1.1.5 自然连接
  • SQL99自然连接
    在这里插入图片描述
    注意:在性能上,自然链接和等值连接是没有区别的
    在这里插入图片描述
--等值连接
SELECT * FROM DEPARTMENTS d ,LOCATIONS l WHERE d.LOCATION_ID = l.LOCATION_ID ;

--自然连接
SELECT * FROM DEPARTMENTS d  NATURAL JOIN LOCATIONS l ;
6.1.1.6 USING子句创建连接

在这里插入图片描述

  • 示例:
    在这里插入图片描述
SELECT d.DEPARTMENT_NAME ,l.CITY FROM DEPARTMENTS d JOIN LOCATIONS l USING(LOCATION_ID) WHERE LOCATION_ID = 1800;
6.1.1.7 内连接
  • SQL99内连接
    在这里插入图片描述
--等值连接
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e,DEPARTMENTS d ,LOCATIONS l WHERE e.DEPARTMENT_ID  = d.DEPARTMENT_ID AND d.LOCATION_ID  = l.LOCATION_ID AND e.EMPLOYEE_ID = 202;

--内连接
SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e INNER JOIN DEPARTMENTS d on(e.DEPARTMENT_ID=d.DEPARTMENT_ID) INNER JOIN LOCATIONS l ON (d.LOCATION_ID = l.LOCATION_ID) WHERE e.EMPLOYEE_ID = 202;

SELECT e.LAST_NAME ,d.DEPARTMENT_NAME ,l.CITY FROM EMPLOYEES e INNER JOIN DEPARTMENTS d using(DEPARTMENT_ID) INNER JOIN LOCATIONS l USING(LOCATION_ID) WHERE e.EMPLOYEE_ID = 202;

6.2 子查询

  • 子查询是一个SELECT语句,它是嵌套在另一个SELECT语句中的子句
    在这里插入图片描述
  • 子查询(内查询)在主查询之前执行一次
  • 子查询的结果被用于主查询(外查询)
  • 子查询可放在:WHERE子句中、HAVING子句中、FORM子句中
    在这里插入图片描述

6.2.1 单行子查询

  • 单行子查询:子查询语句只返回一行的查询,使用单行比较符(=、>、>= 、<、 <=、<>)
    在这里插入图片描述

6.2.2 多行子查询

  • 多行子查询:子查询语句返回多行的查询,
  • 使用多行比较符
    在这里插入图片描述
  • IN :等于列表中的任何成员
  • ANY :比较子查询返回的每个值;< :小于最大值;> :大于最小值
  • ALL :比较子查询返回的全部值;< :小于最小值;> :大于最大值

区别

  • ANY :> ANY 表示至少大于一个值,即大于最小值
  • ALL :> ALL表示大于每一个值,即大于最大值

注意:在条件中也可使用NOT取反

7、DML语言

  • 跟事务有关,需要commit才能完成数据的操作
    在这里插入图片描述

7.1 INSERT语句

在这里插入图片描述

  • 指定列添加,要求其他列不能有非空约束
INSERT INTO DEPARTMENTS (DEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_ID) values (291,'Development',2000);
  • 完全列添加,插入列的数据必须跟表中列名顺序要一致
INSERT INTO DEPARTMENTS values(290,'Development',149,2000);
  • 插入带空值的行,前提是字段列允许有空值才可
    • 隐式方法:省略字段列表中的列
    • 显示方法:在VALUES子句中指定NULL关键字
  • 插入日期值:1)自定义的日期格式要符合Oracle默认格式。2)to_date(2021-03-04’,‘yyyy-MM-dd’)
  • 从另一个表中复制行
    • 用一个查询写insert语句
    • 不用values子句
    • 在查询中列的数目要匹配insert子句中列的数目
--方式一
INSERT INTO emp (id,name,salary,commission) SELECT e.EMPLOYEE_ID ,e.LAST_NAME ,e.SALARY ,e.COMMISSION_PCT FROM EMPLOYEES e WHERE e.JOB_ID like '%REP%';

--方式二:插入的数据要与表的投影列顺序要一致
INSERT INTO emp SELECT e.EMPLOYEE_ID ,e.LAST_NAME ,e.SALARY ,e.COMMISSION_PCT FROM EMPLOYEES e WHERE e.JOB_ID like '%REP%';
  • 使用默认值:在INSERT中的DEFAULT
    • 如果有默认值,只需给字段名的value可赋为default,

7.2 UPDATE语句

在这里插入图片描述

7.3 DELETE语句

在这里插入图片描述

8、事务

8.1 事务的特性

  • 原子性
    在这里插入图片描述

  • 一致性
    在这里插入图片描述

  • 隔离性
    在这里插入图片描述

  • 持久性
    在这里插入图片描述

8.2 事务的操作

  • commit:事务提交
  • rollback:事务回滚
  • savepoint:设置回滚点
    • savepoint
    • rollback to
INSERT INTO values(1,'bjsxt',3000,null);

SAVEPOINT A;

INSERT INTO emp values(2,'oldlu',4000,null);

SAVEPOINT B;

DELETE FROM emp;

ROLLBACK TO A;

8.3 事务的类型

  • 显示事务:手动提交或回滚
  • 隐式事务:自动提交不需要任何处理,同时也不具备回滚性,DDL、DCL语言都是隐式事务操作

9、DDL语言

9.1 CREATE TABLE 语句

在这里插入图片描述

  • 查看数据字典表:USER_TABLES
SELECT table_name FROM USER_TABLES;
  • 查看本用户所拥有的不同的对象类型
SELECT DISTINCT object_type FROM user_objects;
  • 查看本用戶所拥有的表、视图、同义词和序列
SELECT * FROM user_catalog;
  • 查询创建表
CREATE TABLE dept80 AS SELECT e.EMPLOYEE_ID ,e.LAST_NAME name,e.SALARY ,e.HIRE_DATE FROM EMPLOYEES e ;

9.2 ALTER TABLE 语句

在这里插入图片描述

  • 添加一个新的列
    在这里插入图片描述
  • 修改一个列
    在这里插入图片描述
  • 删除一个列
    在这里插入图片描述
ALTER TABLE dept DROP COLUMN salary;
  • 修改列名
alter table dept rename  column olddname to newname;
  • 修改表名(RENAME)
RENAME dept80 TO dept90;
  • 截断表(TRUNCATE TABLE):1)表结构不会被删除,只删除表中的数据;2)截断表时不能给定条件;3)截断表是隐式事务
TRUNCATE TABLE dept90;
  • 删除表(DROP TABLE):1) 删除表结构和数据;2)隐式事务
DROP TABLE dept90;

10、约束

在这里插入图片描述

  • 定义约束原则
    在这里插入图片描述

10.1 非空约束

在这里插入图片描述

10.2 唯一约束

在这里插入图片描述

10.3 主键约束

在这里插入图片描述

  • 表中只允许具有一个主键,但可以联合主键
create table dept50(id number,name varchar2(20),constraint dep50_pk primary key(id,name));

10.4 外键约束

在这里插入图片描述

  • 添加约束
alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);

10.5 自定义约束

在这里插入图片描述

  • 添加自定义约束
alter table dept50 add constraint dept50_ck check(salary > 1000);

10.6 禁用和启用约束

  • 查看约束
    在这里插入图片描述
  • 禁用约束
    在这里插入图片描述
  • 启用约束
    在这里插入图片描述

11、视图

在这里插入图片描述

  • 视图的优越性
    在这里插入图片描述
  • 视图类型
    在这里插入图片描述
    在这里插入图片描述

11.1 创建简单视图

在这里插入图片描述

11.2 创建复杂视图

在这里插入图片描述

11.3 视图DML操作

  • 简单视图可以DML操作,复杂视图不可以DML操作
    在这里插入图片描述
  • 拒绝DML操作:语句后加 with read only
    在这里插入图片描述
  • 删除视图
    在这里插入图片描述

11.4 内建视图

在这里插入图片描述

11.5 Top-N分析

在这里插入图片描述
在这里插入图片描述

SELECT rownum,LAST_NAME ,SALARY FROM (SELECT e2.LAST_NAME ,e2.SALARY FROM EMPLOYEES e2 ORDER BY salary DESC) WHERE ROWNUM <= 3;

12、分页查询

在这里插入图片描述

--查询前十条数据
SELECT * FROM (SELECT rownum rn,e2.* FROM EMPLOYEES e2) em WHERE em.rn >= 1 AND em.rn <= 10;

13、序列

在这里插入图片描述

13.1 DDL创建序列

在这里插入图片描述
在这里插入图片描述

13.2 查询序列

在这里插入图片描述
在这里插入图片描述

SELECT test_seq.nextval FROM dual;

SELECT test_seq.currval FROM dual;

SELECT test_seq.nextval FROM dual;

SELECT test_seq.currval FROM dual;

13.3 修改与删除序列

  • 修改序列
    在这里插入图片描述
  • 修改序列原则
    在这里插入图片描述
  • 删除序列
    在这里插入图片描述

14、索引

在这里插入图片描述

14.1 索引类型

在这里插入图片描述

14.2 创建索引

  • 创建索引
    在这里插入图片描述
  • 不创建索引
    在这里插入图片描述

14.3 操作索引

  • 非唯一性索引:单行索引、复合索引(组合索引)、函数索引

在这里插入图片描述

  • 单行索引
--包含一个列
CREATE INDEX emp_index ON employees(last_name);
  • 复合索引
--包含两个或两个以上的列
CREATE INDEX dept_man_loc ON departments (manager_id,locatime_id);


  • 函数索引
CREATE INDEX dept_upper ON departments(upper(department_name));

SELECT * FROM DEPARTMENTS d WHERE upper(d.DEPARTMENT_ID) = 'AAAA';

14.4 查询索引

在这里插入图片描述

SELECT ic.INDEX_NAME ,ic.COLUMN_NAME ,ic.COLUMN_POSITION , un.UNIQUENESS FROM user_indexes un,user_ind_columns ic WHERE un.index_name = ic.INDEX_NAME AND ic.TABLE_NAME = 'DEPARTMENTS';

14.5 删除索引

在这里插入图片描述

15、同义词

在这里插入图片描述
在这里插入图片描述

16、创建用户

  • Oracle用户是用来连接数据库和访问数据库对象的
  • 使用sys或者system用户来创建新用户
    在这里插入图片描述
  • 使用指定表空间
CREATE USER u_bjsxt IDENTIFIED BY  oracle DEFAULT TABLESPACE bjsxt TEMPORARY TABLESPACE temp;
  • 删除用户
drop user u_test;
  • 删除用户的同时将该用户下的其他对象一并删掉
DROP USER u_test cascade;

17、数据控制语言(DCL)

  • grant:授予用户权限
  • revork:撤销用户权限

17.1 授予系统权限

在这里插入图片描述

  • 可以给用户授予的权限
    在这里插入图片描述
--给用户赋予权限
GRANT CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,unlimited tablespace TO u_user;

17.2 撤销系统权限

  • revoke 权限 from 用户
--撤销用户创建表的权限
revoke create table from u_user;

17.3 创建角色

在这里插入图片描述
在这里插入图片描述

  • 给角色授予权限
    在这里插入图片描述
  • 授予角色给用户
    在这里插入图片描述
CREATE ROLE manager;

GRANT CREATE SESSION,CREATE TABLE ,CREATE VIEW ,CREATE SEQUENCE TO manager;

CREATE USER newbj IDENTIFIED BY oracle DEFAULT tablespace bj;
--不限表空间只能授予用户,不能授予角色
GRANT unlimited tablespace TO newbj;

GRANT manger TO bj;
  • 撤销用户角色
revoke manager from newbj;

18、执行计划

  • 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • TABLE ACCESS FULL(全表扫描)
    在这里插入图片描述

  • TABLE ACCESS BY INDEX ROWID(通过ROWID的表存取)
    在这里插入图片描述
    在这里插入图片描述

  • TABLE ACCESS BY INDEX SCAN(索引扫描)
    在这里插入图片描述

    • 索引扫描分两步
      在这里插入图片描述
    • 五种索引扫描
      在这里插入图片描述
      • 索引唯一扫描
        在这里插入图片描述
      • 索引范围扫描
        在这里插入图片描述
      • 索引全扫描
        在这里插入图片描述
      • 索引快速扫描
        在这里插入图片描述
      • 索引跳跃扫描
        在这里插入图片描述

18.1 执行计划的使用

  • 单表
    • 分析查询表中的所有数据
      在这里插入图片描述
    • 分析主键作为条件的查询
      在这里插入图片描述
    • 分析非主键列作为查询条件
      在这里插入图片描述
    • 分析like条件
      在这里插入图片描述
    • 分析非唯一性索引列作为条件的查询
      在这里插入图片描述
    • 分析非唯一性索引中=、>、<、<>条件
      在这里插入图片描述
    • 分析创建索引中=、>、<、<>条件(=、<走索引,而>、<>不走索引)
      在这里插入图片描述
      在这里插入图片描述
  • 多表
    • 内连接:等值连接
      在这里插入图片描述

    • 内连接:子查询
      select * from employees e where e.department_id in (select d.department_id from departments d);

    • 外连接
      在这里插入图片描述

19、Oracle的优化器

  • RBO(Rule-Based Optimization) 基于规则的优化器
    在这里插入图片描述

  • CBO(Cost-Based Optimization)基于代价的优化器
    在这里插入图片描述

20、Oracle的数据导入与导出

  • 导入导出数据库需要注意
    在这里插入图片描述
  • 导出数据格式
    在这里插入图片描述

20.1 传统方式exp(导出)和(imp)导入

  • 命令执行方式
    • 需要在操作系统的命令窗口执行,而非sql/plus
    • 使用导出或导入命令时,在命令的后侧不要添加分号
  • 命令格式
    在这里插入图片描述
  • 导出命令
--导出命令
exp HR/HR@localhost:1521/orcl file=c:/1.dmp
  • 导入命令
--导入命令
imp HR/HR@localhost:1521/orcl file=c:/1.dmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值