1、Oracle简介
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
2、Oracle与SQL Server
①采用模式:Oracle采用的是并行服务器模式,而Sybase SQL Server采用的是虚拟服务器模式
②开发性:Oracle 能在所有主流平台上运行(包括 windows),完全支持所有的工业标准,采用完全开放策略;SQL Server 只能在windows上运行,没有丝毫的开放性。
③性能:在对称多处理方面Oracle的性能优于Sybase的性能。
④操作性:Oracle 较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同; SQL Server 操作简单,但只有图形界面。
⑤客户端支持: Oracle 多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接;SQL Server C/S结构,只支持windows客户,可以用ADO、DAO、OLEDB、ODBC连接。
⑥风险性:Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险; SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容。
3、Oracle优点
4、Oracle用户和权限
Oracle中,一般不会轻易在一个服务器上创建多个数据库,在一个数据库中,不同的项目由不同的用户访问,每一个用户拥有自
身创建的数据库对象,因此用户的概念在Oracle中非常重要。Oracle的用户可以用CREATE USER命令来创建。其语法是:
语法结构:创建用户
CREATE USER 用户名 IDENTIFIED BY 口令 [ACCOUNT LOCK|UNLOCK]
其中,LOCK|UNLOCK创建用户时是否锁定,默认为锁定状态。锁定的用户无法正常的登录进行数据库操作。
尽管用户成功创建,但是还不能正常的登录Oracle数据库系统,因为该用户还没有任何权限。如果用户能够正常登录,至少需要
CREATE SESSION系统权限。Oracle用户对数据库管理或对象操作的权利,分为系统权限和数据库对象权限。
系统权限比如:CREATE SESSION,CREATE TABLE等,拥有系统权限的用户,允许拥有相应的系统操作。
数据库对象权限,比如对表中的数据进行增删改操作等,拥有数据库对象权限的用户可以对所拥有的对象进行对应的操作。
语法结构:授权
GRANT角色|权限 TO 用户(角色)
5、Oracle SQL语句
Ø 数据定义语言Data Definition Language(DDL) ,包括CREATE(创建)命令、ALTER(修改)命令、DROP(删除)命令等。
Ø 数据操纵语言 Data Manipulation Language(DML) ,包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)命令、SELECT … FOR UPDATE(查询)等。目前主流的数据库产品(比如:SQL Server、Oracle)都支持标准的SQL语句。数据定义语言,表的增删改操作,数据的简单查
询,事务的提交和回滚,权限的授权和撤销等,Oracle与SQL Server在操作上基本一致。
6、创建表和约束
CREATE TABLE INFOS
(
STUID VARCHAR2(7) NOT NULL, --学号 学号=‘S’+班号+2位序号
STUNAME VARCHAR2(10) NOT NULL, --姓名
GENDER VARCHAR2(2) NOT NULL, --性别
AGE NUMBER(2) NOT NULL, --年龄
SEAT NUMBER(2) NOT NULL, --座号
ENROLLDATE DATE, --入学时间
STUADDRESS VARCHAR2(50) DEFAULT --住址
CLASSNO VARCHAR2(4) NOT NULL --班号班号=学期序号+班级序号
)
ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID) --主键约束
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER
CHECK(GENDER = '男' OR GENDER = '女')
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT
CHECK(SEAT >=0 AND SEAT <=50)
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE
CHECK(AGE >=0 AND AGE<=100)
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO
CHECK((CLASSNO >='1001' AND CLASSNO<='1999') OR (CLASSNO >='2001' AND CLASSNO<='2999'))
ALTER TABLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) --唯一约束
6、Oracle日期
在Oracle中,日期是国际化的,不同的区域安装的数据库,默认的日期格式不同,因此为了程序便于移植,日期的输入要使用TO_DATE函数对日期格式化后输入,采用格式化字符串对日期进行格式化时,格式化字符串中字符不区分大小写,常见的格式化字符如下:
yyyy | 表示四位年份 |
mm | 表示两位月份,比如3月表示为03 |
dd | 表示两位日期 |
hh24 | 表示小时从0-23,hh12也表示小时从0-11 |
mi | 表示分钟 |
ss | 表示秒 |
7、删除
TRUNCATE和DELETE都能把表中的数据全部删除,他们的区别是:
TRUNCATE是DDL命令,删除的数据不能恢复;
DELETE命令是DML命令,删除后的数据可以通过日志文件恢复。
如果一个表中数据记录很多,TRUNCATE相对DELETE速度快,但由于TRUNCATE命令比较危险,因此在实际开发中,
TRUNCATE命令慎用。
8、关系运算和逻辑运算
Oracle中Where子句经中经常见到关系运算和逻辑运算,常见的关系运算有:
逻辑运算符有三个:AND、OR、NOT、ALL、ANY、SOME、BETWEEN、EXISTS、IN、LIKE
9、通配符
在一些查询时,可能把握不准需要查询的确切值,比如百度搜索时输入关键字即可查询出相关的结果,这种查询称为模糊查询。
模糊查询使用LIKE关键字通过字符匹配检索出所需要的数据行。
% | 包含0个或多个字符的任意字符串 |
_ | 任何单个字符 |
[ ] | 指定范围或集合中的任何单个字符,eg where name like '[王,刘]__'表示姓王或刘的三个字的姓名 |
[^] | 不属于指定范围或集合中的任何单个字符 |
10、Oracle函数
Oracle SQL提供了用于执行特定操作的专用函数。这些函数大大增强了SQL语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。Oracle数据库中主要使用两种类型的函数:
①单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。常用的单行函数有字符函数、数字函数、转换函数、日期函数
字符函数 | 函数说明 |
ASCII(x) | 返回字符x的ASCII码 |
CONCAT(x,y) | 连接字符串x和y |
INSTR(x, str [,start] [,n) | 在x中查找str,可以指定从start开始,也可以指定从第n次开始 |
LENGTH(x) | 返回x的长度 |
LOWER(x) | x转换为小写 |
UPPER(x) | x转换为大写 |
LTRIM(x[,trim_str]) | 把x的左边截去trim_str字符串,缺省截去空格 |
RTRIM(x[,trim_str]) | 把x的右边截去trim_str字符串,缺省截去空格 |
TRIM([trim_str FROM] x) | 把x的两边截去trim_str字符串,缺省截去空格 |
REPLACE(x,old,new) | 在x中查找old,并替换为new |
SUBSTR(x,start[,length]) | 返回x的字串,从staart处开始,截取length个字符,缺省length,默认到结尾 |
数字函数 |
说明 |
示例 |
ABS(x) |
x绝对值 |
ABS(-3)=3 |
ACOS(x) |
x的反余弦 |
ACOS(1)=0 |
COS(x) |
余弦 |
COS(1)=1.57079633 |
CEIL(x) |
大于或等于x的最小值 |
CEIL(5.4)=6 |
FLOOR(x) |
小于或等于x的最大值 |
FLOOR(5.8)=5 |
LOG(x,y) |
x为底y的对数 |
LOG(2,4)=2 |
MOD(x,y) |
x除以y的余数 |
MOD(8,3)=2 |
POWER(x,y) |
x的y次幂 |
POWER(2,3)=8 |
ROUND(x[,y]) |
x在第y位四舍五入 |
ROUND(3.456,2)=3.46 |
SQRT(x) |
x的平方根 |
SQRT(4)=2 |
TRUNC(x[,y]) |
x在第y位截断 |
TRUNC(3.456,2)=3.45 |
转换函数 | 示例 |
to_char(date,'fmt') | 把日期类型的数据按照某个格式转换为字符串,eg to_char(sysdate,' yyyy''年''mm''月''dd''日'' ' from dual |
to_char(num,'fmt') | to_char(12345.67899,'fmL999G999G999G999D99') from dual 结果为$12,345.68 |
G表示分组,D表示小数点,fm表示去除多余空格,L表示货币符号 | |
to_number(str) | 把字符串转换为数字 |
to_date(str,'fmt') | 把str转换为日期,eg to_date('1990-08-10','yyyy-mm-dd'),结果1990- |
日期函数 |
函数说明 |
|
ADD_MONTHS(d,n) |
在某一个日期d上,加上指定的月数n,返回计算后的新日期 |
|
LAST_DAY(d) |
返回指定日期当月的最后一天 |
|
ROUND(d[,fmt]) |
返回一个以fmt为格式的四舍五入日期值,d是日期,fmt是格式模型(解释1) |
|
EXTRACT(fmt FROM d) |
提取日期中的特定部分(解释2) |
解释1:
如果fmt为“YEAR”则舍入到某年的1月1日,即前半年舍去,后半年作为下一年。
如果fmt为“MONTH”则舍入到某月的1日,即前月舍去,后半月作为下一月。
默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天。
如果fmt为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。
解释2:
fmt为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中YEAR、MONTH、DAY可以为DATE类型匹配,也可以与TIMESTAMP类型匹配;但是HOUR、MINUTE、SECOND必须与TIMESTAMP类型匹配。
②聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果,常与GROUP BY连用。
聚合函数 | 函数说明 |
AVG | 求平均值 |
SUM | 求和 |
COUNT | 数据统计 |
MAX、MIN | 求最值 |