Oracle 学习笔记(一)Oracle的基本介绍与语法

时间:2022-06-05 23:40:15

1.1 Oracle基础知识

1.1.1 介绍

Oracle数据库的主要特点:

支持多用户、大事务量的事务处理

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

支持分布式数据处理

具有可移植性

1.1.2 Oracle基本概念

系统全局区

程序缓冲区

数据库读写进程

日志读写进程

表空间->段->数据块(大到小)

1.数据库

它是磁盘上存储数据的集合,在物理上表现为数据文件、日志文件和控制文件等,在逻辑上以表空间形式存在。

2.全局数据库名

全局数据库名是用于区分一个数据库的标识,在安装数据库、创建新数据库、创建控制文件、修改数据库结构、利用RMAN备份时都需要使用。它由数据库名称和域名构成,类似网络中的域名,使数据库的命名在整个网络环境中唯一。

3.数据库实例

每个启动的数据库都对应一个数据库实例,由于这个实例来访问数据库中的数据。如果把数据库简单的理解为硬盘上的文件,具有永久性,则数据库实例就是通过内存共享运行状态的一组服务器后台进程。

4.表空间

每个Oracle数据库都是由若干个表空间构成的,用户在数据库中建立的所有内容都被存储到表空间中。一个表空间可以由多个数据文件组成,但一个数据文件只能属于一个表空间。与数据库文件这种物理结构相比,表空间是属于数据库的逻辑结构

5.数据文件

通常数据文件的扩展名是.dbf,是用于存储数据库数据的文件,如存储数据库表中的记录、索引、存储过程、视图、数据字典定义等。

6.控制文件

通常控制文件的扩展名是.ctl,是一个二进制文件。其中包含数据文件和日志文件的名称和位置。Oracle 11g默认包含三个控制文件。每个控制文件内容相同。

7.日志文件

通常日志文件的扩展名是.log,它记录了数据的所有更改信息,并提供了一种数据恢复机制,确保在系统崩溃或其他意外出现后重新恢复数据库。

在Oracle数据库中,日志文件是成组使用的,每个日志文件组可以有一个或多个日志文件。在工作过程中,多个日志文件组之间循环使用,当一个日志文件组写满后,会转向下一个日志文件组。

8.模式和模式对象

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

1.1.4 Oracle数据库服务

OracleServiceSID服务是Oracle数据库服务。此服务是对应名为SID(系统标识符)的数据库实例创建的,SID是在安装Oracle11g时输入的数据库名称。

OracleOraDb11g_home1TNSListener服务是监听服务。连接远程服务器时要开启监听服务。

OracleDBConsoleSID服务是数据库控制台服务,EMC(企业管理控制台)的服务程序

1.1.6连接数据库

·1.SQL*Plus工具

  1. 找到sqlPlus
  2. 直接在dos中输入sqlplus
  3. 一次输入账号、密码或者直接在提示输入用户名时输入username/pwd

2.PL/SQL Developer工具

使用:

(1)       用户名:输入用户名

(2)       口令:密码

(3)       数据库:输入已经配置好的网络服务名,如orclDB

(4)       连接为:输入Normal。Normal为普通用户;sysOper为数据库操作员,主要包括打开数据服务器,关闭数据服务器,备份数据库,恢复数据库等;sysDBA为数据库管理员,主要包括打开数据库服务器,关闭数据库服务器,备份数据库,恢复数据库,日志归档,管理功能,创建数据库等。

1.2 Oracle数据类型

1.字符数据类型

CHAR数据类型

当需要固定长度的字符串时,使用CHAR数据类型。这种数据类型的列长度可以是1~2000字节。如果在定义时未指明大小,则默认其占用1字节。

VARCHAR2数据类型

支持可变长度的字符串。该数据类型的大小为1~4000字节。在定义时应指定其大小。

NCHAR数据类型

国家字符集,使用方法和CHAR相同。区别在于NCHAR用来存储Unicode字符集类型,NCHAR每个字符占用两字节。

NVARCHAR2存储变长字符串

声明方法:VARCHAR(10 CHAR)   --存储10个字符

2.数值数据类型

NUMBER数据类型可以存储正数、负数、零、定点数和精度为38位的浮点数。语法:

NUMBER(p,s)

其中,p为精度,表示数字的有效位数,在1~38之间。有效位数:从左边第一个不为0 的数算起,小数点和负号不计入有效位数。S为范围,表示小数点右边数字的位数,它在-84~+127之间。

规则:首先精确到小数点右边s位,并四舍五入。如果精确后值的有效位数<=p,则正确;否则报错。

3.日期时间数据类型

1.DATA数据类型

DATA数据类型用于存储表中的日期和时间数据。Oracle数据库使用自己的格式存储日期,使用7字节固定长度,每个字节分别存储世纪、年、月、日、小时、分和秒。日期时间数据类型的值为4712年1月1日到9999年12月31日。SYSDATE函数的功能是返回当前的日期和时间

2.TIMESTAMP数据类型

用于存储日期的年、月、日及时间的小时、分、秒。其中秒值精确到小数点后6位。SYSTIMESTAMP函数的功能是返回当前日期、时间和时区。

4.    LOB数据类型

LOB又称为“大对象”数据类型。可以存储4GB的非结构化信息

  1. CLOB(Character LOB,字符串LOB)存储大量字符数据
  2. BLOB(Binary LOB,二进制LOB)可以存储较大的二进制对象,如图形、视频。
  3. BFILE(Binary File,二进制文件)能够将二进制文件存储在数据库外部的操作系统文件中。
  4. NCLOB存储大的NCHAR字符数据。NCLOB数据类型同时支持固定宽度字符和可变宽度字符(Unicode字符数据)

Oracle中的表可以有多个LOB列。

5.    伪列

伪列就像一个表列,但是它没有存储在表中

1.ROWID    数据库中的每一行都有一个行地址,ROWID伪列返回该行地址。

伪列的用途:

能以最快的方式访问表中的一行

能显示表的行是如何存储的

可以作为表中行的唯一标识

使用SELECT语句查看ROWID值:

SELECT ROWID,eName FROM SCOTT.emp where eName=’SMITH’

2.ROWNUM对于一个查询返回的每一行,ROWNUM伪列返回一个数值代表行的次序。返回的第一行的ROWNUM值为1,以此递增

SQL示例:

SELECT emp.*,ROWNUM FROM SCOTT.emp WHERE ROWNUM<11

注意:rownum条件查询时能查找>0   =1   <n的条件

1.3 SQL语言

Sql语言的分类:

数据定义语言(DDL):CREATE(创建)、ALTER(更改)、TRUNCATE(截断)和DROP(删除)

数据操纵语言(DML):INSTER(插入)、SELECT(选择)、DELETE(删除)和UPDATE(更新)

事务控制语言(TCL):COMMIT(提交)、SAVEPOINT(保存点)和ROLLBACK(回滚)

数据控制语言(DCL):GRANT(授予)和REVOKE(回收)

1.3.1

1.CREATE TABLE命令

语法:

CREATE TABLE [schema.]table

(column datatype[,column datatype[,……]]);

Schema表示对象的所有者,即模式的名称。

Table 表示表的名称

Column表示列的名称

Datatype表示该列的数据类型及其宽度

创建表时,需要指定唯一的表名称、表内唯一的列名称、列的数据类型及其宽度

示例:

CREATE TABLE stuInfo

(

stuNo CHAR(6) NOT NULL,

stuName VARCHAR2(20) NOT NULL,

stuAge NUMBER(3,0) NOT NULL

);

表名规范:

表名首字符应该为字母

不能使用Oracle保留字来为表命名

表名的最大长度为30个字符

同一用户模式下的不同表不能具有相同的名称

可以使用下划线、数字和字母,但不能使用空格和单引号

2.TRUNCATE TABLE 命令

语法:

TRUNCATE TABLE <tablename>;

1.3.2 数据操纵语言

1.选择无重复的行:

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 “年龄” from stuInfo;

别名有空格时要加双引号

4.利用现有的表创建新表

CREATE TABLE <newtable>

AS

SELECT {*|column(s)}

FROM <oldtable> [WHERE <condition>];

示例:

CREATE TABLE newsStuInfo1

AS

SELECT * FROM stuInfo;

仅仅复制表的结构,而不复制记录:

CREATE TABLE newStudentInfo3

AS

SELECT * FROM stuInfo WHERE 1=2;

5.查看表中行数

SELECT COUNT(*) FROM TABLE;--效率较低

SELECT COUNT(1) FROM TABLE;--效率较高

  1. 取出stuName,stuAge列不存在重复数据的记录

SELECT stuName,stuAge

FROM stuInfo

GROUP BY stuName,stuAge

HAVING(COUNT(stuName|| stuAge)<2);

  1. 删除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)

);

1.3.3 事务控制语言

在Oracle数据库中事务控制语句(TCL)主要由以下部分组成:

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

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

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

(4)       ROLLBACK TO <SavePoint_Name>:将事务回滚到存储点

1.4.4 集合操作符

1.UNION操作符返回两个查询选定的所有不重复的行。

示例1:

SELECT empno FROM employee

UNION

SELECT rempno FROM retireEmp;

示例2:使用ORDER BY子句,必须将它放在最后一个SELECT之后

SELECT empno FROM employee

UNION

SELECT rempno FROM retireEmp;

ORDER BY empno;

2.UNION ALL    合并两个查询选定的所有行,包括重复的行

3.INTERSECT(交集)返回两个查询都有的行

示例:

SELECT empno FROM employee

INTERSECT

SELECT rempno FROM retireEmp;

4.MINUS(减集)只返回由第一个查询选定而未被第二个查询选定的行,即在第一个查询结果中排除第二个查询结果中的行

示例:

SELECT empno FROM employee

MINUS

SELECT rempno FROM retireEmp;

1.4.5 连接操作符

示例:输出岗位和员工姓名组合在一起的信息

SELECT job||’_’||ename FROM employee;

1.5.1 SQL函数

1.转换函数

函数

功能

实例

结果

TO_CHAR()

转换成字符串类型

TO_CHAR(1234.5,’$9999.9’)

$1234.5

TO_DATE()

转换成日期类型

TO_DATE(‘1980-01-01’,’yyyy-mm-dd’)

01-1月-80

TO_NUMBER

转换成数值类型

TO_NUMBER(‘1234.5’)

1234.5

其他函数:

NVL(exp1,exp2)   如果exp1的值为null,则返回exp2的值,否则返回exp1的值

NVL2(exp1,exp2,exp3)如果exp1的值为null,则返回exp2的值,否则返回exp3的值

DECODE(value,if1,then1,if2,then2,…,else)   如果value的值为if1,则返回then1,依次类推,否则返回else的值,像 if(){}else if(){}else{}

2.分析函数:分析函数是对一组查询结果进行计算,然后获得结果,与聚合函数的区别在于分析函数每个组返回多行,聚合函数每组返回一行

语法:

函数名([参数]) OVER ([分区子句][排序子句])

在语法中:

函数名表示分析函数的名称

参数表示函数需要传入的参数

分区子句(PARTITION BY)表示将查询结果分为不同的组,功能类似于GROUP BY语句,是分析函数工作的基础。默认将所有结果作为一个分组

排序子句(ORDER BY)表示将每个分区进行排序

1.ROW_NUMBER   函数返回一个唯一的值,当遇到相同数据时,排名按照记录集中记录的顺序依次递增

2.DENSE_RANK   函数返回一个唯一的值,当遇到相同数据时,所有相同数据的排名都是一样的

3.RANK   函数返回一个唯一的值,当遇到相同的数据时,所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

这三个函数的唯一区别是每组数据遇到相同数据时的排名策略

select ename,sal,deptno,

rank() over(partition by deptno order by sal desc) "rank",

dense_rank() over(partition by deptno order by sal desc) "dense_rank",

row_number() over(partition by deptno order by sal desc) "row_number"

from emp

Oracle 学习笔记(一)Oracle的基本介绍与语法

【来自 乐智的菜园子:www.cnblogs.com/AIThink 亲们,码字不容易,转载请注明出处。】

Oracle 学习笔记(一)Oracle的基本介绍与语法的更多相关文章

  1. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  2. oracle学习笔记(十五) PL&sol;SQL语法结构以及使用

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...

  3. oracle学习笔记系列------oracle 基本操作之基本函数的用法

    --创建一个accout账户表 CREATE TABLE account( id ) NOT NULL, recommender_id ), login_name ) NOT NULL, login_ ...

  4. oracle学习笔记系列------oracle操作例子的专用表

    CREATE TABLE dept( deptno ), dname ) , loc ) ) ; CREATE TABLE emp( empno ), ename ), job ), mgr ), h ...

  5. oracle学习笔记系列------oracle 基本操作之表的增删改查

    --创建一个表 CREATE TABLE employee_souvc( id ), name ), gender ), birth DATE, salary ,), job ), deptno ) ...

  6. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  9. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  10. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

随机推荐

  1. 第二天ci项目规划 数据库设计

    第二天ci项目规划 数据库设计 商品 + 用户 + 订单 数据库设计思想和方法 关于商品品牌 ,分类 ,属性 如何表示 用一个字段 还是再设计一张表 品牌和商品 是一种信息 还是两种信息 一张表一般只 ...

  2. GitHub托管BootStrap资源汇总(持续更新中…)

    Twitter BootStrap已经火过大江南北,对于无法依赖美工的程序员来说,这一成熟前卫的前端框架简直就一神器,轻轻松松地实现出专业的UI效果.GitHub上相关的的开源项目更是层出不穷,在此整 ...

  3. WCF Security(转载)

    WCF Security 主要包括 "Transfer Security"."Access Control"."Auditing" 几个部分 ...

  4. SQL Server的日期和时间类型

    Sql Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1,秒的精度是指使用多少位小数表示秒 DateTime数据类型秒的精度是3,D ...

  5. winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 z

    http://www.zuowenjun.cn/post/2015/05/20/162.html 判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为Dat ...

  6. WebService另一种轻量级实现—Hessian 学习笔记

    最近和同事聊天,得知他们在使用一种叫做Hessian的WebService实现方式实现远 程方法调用,是轻量级的,不依赖JavaEE容器,同时也是二进制数据格式传输,效率比SOAP的XML方式要高.感 ...

  7. PermissionError&colon; &lbrack;WinError 32&rsqb; 另一个程序正在使用此文件,进程无法访问。&colon; &&num;39&semi;C&colon;&bsol;&bsol;Users&bsol;&bsol;video&bsol;&bsol;AppData&bsol;&bsol;Local&bsol;&bsol;Temp&bsol;&bsol;tmpfipzk8ma&&num;39&semi;--问题解决

    学习python+selenium总是遇到各种问题 代码如下: from selenium import webdriverbrowser = webdriver.PhantomJS() #浏览器初始 ...

  8. Java之final、finalize、finally的区别

    一.性质不同(1)final为关键字:(2)finalize()为方法:(3)finally为为区块标志,用于try语句中:二.作用(1)final为用于标识常量的关键字,final标识的关键字存储在 ...

  9. WPF ResourceDictionary 主题资源替换(一)

    当我们需要在程序中替换主题,更换另一套背景.颜色.样式时,如何在不修改资源Key值,直接替换呢? 问题&疑问 1. Key值冲突 同一ResourceDictionary中,不可以使用相同Ke ...

  10. elasticdump 方法迁移数据

    elasticdump -rm -ti taskrabbit/elasticsearch-dump --ignore-errors=true --offset=1000  --input=http:/ ...