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

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   的条件

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 ;

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

   AS

SELECT {*|column(s)}

   FROM [WHERE ];

示例:

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 :将事务回滚到存储点

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

 

 

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

你可能感兴趣的:(Oracle 学习笔记(一)Oracle的基本介绍与语法)