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

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

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

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

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

  2. oracle学习笔记(十五) PL/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. Ecshop 数据库操作方法getRow、getAll、getOne区别

    ECShop没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,大大减小了分发包的文件大小.另外,当网站需要做memcached缓存时,也可以 ...

  2. PHP 设计模式之观察者模式 (转载)

    介绍      现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,事件.而有的人喜欢写杂文或者散文,有的人 ...

  3. Python学习6.1_函数参数及参数传递

    大多数编程语言都绕不开一个名词,那就是--函数(function).而函数很重要的部分则是参数(arguments)的使用.Python的参数传递总体来说是根据位置,传递对应的参数.阐述如下: 1.位 ...

  4. HDU-1799(组合递推公式)

    HDOJ-1799 - Fighting_Dream M - 暴力求解.打表 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Forma ...

  5. UML类图标识

    矩形框:类 第一层:类名(抽象类用斜体). 第二层:属性(‘+’ 表示 public.‘-’ 表示 private.‘#’ 表示 protected). 第三层:方法. <<interfa ...

  6. iOS App转让流程

    说法一: (1)选择转让APP (2)进入转让界面       点击Continue进入下一步   (3)输入对方的APP ID和Team ID     Apple ID 和 Team ID 可以在m ...

  7. No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'

    运行代码是出现了这个错误,No Entity Framework provider found for the ADO.NET provider with invariant name 'System ...

  8. 不通用版(从SVN取版本,通过MAVEN生成JAVA包,通过SALTSTACK传送到远程服务器并自动重启TOMCAT服务)PYTHON代码

    从昨晚写到今天啊, 第一版测试成功了. PHP和JAVA的更新相对来说,PHP的自动化更新是简单多啦~~ 当然,这只是运维工作当中的一环~~ #!/usr/bin/env python # -*- c ...

  9. 【转】在linux内核中读写文件 -- 不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成 ...

  10. 网络智能和大数据公开课Homework3 Map-Reduce编程

    Web Intelligence and Big Data by Dr. Gautam Shroff 这门课是关于大数据处理,本周是第一次编程作业,要求使用Map-Reduce对文本数据进行统计.使用 ...