您的位置:首页 > 数据库 > Oracle

ORACLE基础语法学习

2011-01-03 01:42 239 查看
ORACLE
常用的
SQL
语法和数据对象

.
数据控制语句
(DML)
部分
1.INSERT

(
往数据表里插入记录的语句
)
INSERT INTO
表名
(
字段名
1,
字段名
2, ……) VALUES (

1,

2, ……);
INSERT INTO
表名
(
字段名
1,
字段名
2, ……)

SELECT (
字段名
1,
字段名
2, ……) FROM
另外的表名
;
字符串类型的字段值必须用单引号括起来
,
例如
: ’GOOD DAY’
如果字段值里包含单引号

需要进行字符串转换
,
我们把它替换成两个单引号
''.
字符串类型的字段值超过定义的长度会出错
,
最好在插入前进行长度校验
.
日期字段的字段值可以用当前数据库的系统时间
SYSDATE,
精确到秒
或者用字符串转换成日期型函数
TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()
还有很多种日期格式
,
可以参看
ORACLE DOC.

-

-
日 小时
:
分钟
:
秒 的格式
YYYY-MM-DD HH24:MI:SS

INSERT
时最大可操作的字符串长度小于等于
4000
个单字节
,
如果要插入更长的字符串
,
请考虑字段用
CLOB
类型
,
方法借用
ORACLE
里自带的
DBMS_LOB
程序包
.

INSERT
时如果要用到从
1
开始自动增长的序列号
,
应该先建立一个序列号
CREATE SEQUENCE
序列号的名称
(
最好是表名
+
序列号标记
) INCREMENT BY 1

START

WITH

1

MAXVALUE

99999

CYCLE

NOCACHE;
其中最大的值按字段的长度来定
,
如果定义的自动增长的序列号
NUMBER(6) ,
最大值为
999999
INSERT
语句插入这个字段值为
:
序列号的名称
.NEXTVAL

2.DELETE

(
删除数据表里记录的语句
)
DELETE FROM
表名
WHERE
条件
;
注意:删除记录并不能释放
ORACLE
里被占用的数据块表空间
.
它只把那些被删除的数据块标成
unused.
如果确实要删除一个大表里的全部记录
,
可以用
TRUNCATE
命令
,
它可以释放占用的数据块表空间
TRUNCATE TABLE
表名
;
此操作不可回退
.

3.UPDATE

(
修改数据表里记录的语句
)
UPDATE
表名
SET
字段名
1=

1,
字段名
2=

2, …… WHERE
条件
;
如果修改的值
N
没有赋值或定义时
,
将把原来的记录内容清为
NULL,
最好在修改前进行非空校验
;

N
超过定义的长度会出错
,
最好在插入前进行长度校验
..
注意事项
:
A.
以上
SQL
语句对表都加上了行级锁
,
确认完成后
,
必须加上事物处理结束的命令
COMMIT
才能正式生效
,
否则改变不一定写入数据库里
.
如果想撤回这些操作
,
可以用命令
ROLLBACK
复原
.
B.
在运行
INSERT, DELETE

UPDATE
语句前最好估算一下可能操作的记录范围
,
应该把它限定在较小
(
一万条记录
)
范围内
,.
否则
ORACLE
处理这个事物用到很大的回退段
.
程序响应慢甚至失去响应
.
如果记录数上十万以上这些操作
,
可以把这些
SQL
语句分段分次完成
,

其间加上
COMMIT
确认事物处理
.


.
数据定义
(DDL)
部分

1.CREATE (
创建表
,
索引
,
视图
,
同义词
,
过程
,
函数
,
数据库链接等
)
ORACLE
常用的字段类型有
CHAR

固定长度的字符串
VARCHAR2

可变长度的字符串
NUMBER(M,N)

数字型
M
是位数总长度
, N
是小数的长度
DATE

日期类型
创建表时要把较小的不为空的字段放在前面
,
可能为空的字段放在后面
创建表时可以用中文的字段名
,
但最好还是用英文的字段名
创建表时可以给字段加上默认值
,
例如
DEFAULT SYSDATE
这样每次插入和修改时
,
不用程序操作这个字段都能得到动作的时间
创建表时可以给字段加上约束条件
例如 不允许重复
UNIQUE,
关键字
PRIMARY KEY

2.ALTER

(
改变表
,
索引
,
视图等
)
改变表的名称
ALTER TABLE
表名
1

TO
表名
2;

在表的后面增加一个字段
ALTER TABLE
表名
ADD
字段名 字段名描述
;

修改表里字段的定义描述
ALTER TABLE
表名
MODIFY
字段名 字段名描述
;

给表里的字段加上约束条件
ALTER TABLE
表名
ADD CONSTRAINT
约束名
PRIMARY KEY (
字段名
);
ALTER TABLE
表名
ADD CONSTRAINT
约束名
UNIQUE (
字段名
);

把表放在或取出数据库的内存区
ALTER TABLE
表名
CACHE;
ALTER TABLE
表名
NOCACHE;

3.DROP

(
删除表
,
索引
,
视图
,
同义词
,
过程
,
函数
,
数据库链接等
)
删除表和它所有的约束条件
DROP TABLE
表名
CASCADE CONSTRAINTS;

4.TRUNCATE (
清空表里的所有记录
,
保留表的结构
)
TRUNCATE
表名
;


.
查询语句
(SELECT)
部分
SELECT
字段名
1,
字段名
2, …… FROM
表名
1, [
表名
2, ……] WHERE
条件
;

字段名可以带入函数

例如
:

COUNT(*), MIN(
字段名
),

MAX(
字段名
),

AVG(
字段名
), DISTINCT(
字段名
),

TO_CHAR(DATE
字段名
,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)
函数
解释
:

IF EXPR1=NULL

RETURN EXPR2
ELSE

RETURN EXPR1

DECODE(AA

V1

R1

V2

R2....)
函数
解释
:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL

LPAD(char1,n,char2)
函数
解释
:
字符
char1
按制定的位数
n
显示,不足的位数用
char2
字符串替换左边的空位

字段名之间可以进行算术运算
例如
:

(
字段名
1*
字段名
1)/3

查询语句可以嵌套
例如
: SELECT …… FROM
(SELECT …… FROM
表名
1, [
表名
2, ……] WHERE
条件
) WHERE
条件
2;

两个查询语句的结果可以做集合操作
例如
:
并集
UNION(
去掉重复记录
),
并集
UNION ALL(
不去掉重复记录
),
差集
MINUS,

交集
INTERSECT

分组查询
SELECT
字段名
1,
字段名
2, …… FROM
表名
1, [
表名
2, ……] GROUP BY
字段名
1
[HAVING
条件
] ;

两个以上表之间的连接查询

SELECT
字段名
1,
字段名
2, …… FROM
表名
1, [
表名
2, ……] WHERE

表名
1.
字段名
=
表名
2.
字段名
[ AND ……] ;

SELECT
字段名
1,
字段名
2, …… FROM
表名
1, [
表名
2, ……] WHERE

表名
1.
字段名
=
表名
2.
字段名
(+) [ AND ……] ;


(+)
号的字段位置自动补空值

查询结果集的排序操作
,
默认的排序是升序
ASC,
降序是
DESC

SELECT
字段名
1,
字段名
2, …… FROM
表名
1, [
表名
2, ……]
ORDER BY
字段名
1,
字段名
2 DESC;

字符串模糊比较的方法

INSTR(
字段名
, ‘
字符串
’)>0

字段名
LIKE


字符串
%’

[‘%
字符串
%’]

每个表都有一个隐含的字段
ROWID,
它标记着记录的唯一性
.


.ORACLE
里常用的数据对象
(SCHEMA)

1.
索引
(INDEX)

CREATE INDEX
索引名
ON
表名
(
字段
1, [
字段
2, ……] );
ALTER INDEX
索引名
REBUILD;

一个表的索引最好不要超过三个
(
特殊的大表除外
),
最好用单字段索引
,
结合
SQL
语句的分析执行情况
,
也可以建立多字段的组合索引和基于函数的索引

ORACLE8.1.7
字符串可以索引的最大长度为
1578
单字节
ORACLE8.0.6
字符串可以索引的最大长度为
758
单字节

ORACLE DOC
上说字符串最大可以建索引的长度约是
:
数据块的大小
(db_block_size)*40%

2.
视图
(VIEW)

CREATE VIEW
视图名
AS SELECT …. FROM …..;
ALTER VIEW
视图名
COMPILE;

视图仅是一个
SQL
查询语句
,
它可以把表之间复杂的关系简洁化
.

3.
同义词
(SYNONMY)
CREATE SYNONYM
同义词名
FOR
表名
;
CREATE SYNONYM
同义词名
FOR
表名
@
数据库链接名
;

4.
数据库链接
(DATABASE LINK)
CREATE DATABASE LINK
数据库链接名
CONNECT TO
用户名
IDENTIFIED BY
密码
USING ‘
数据库连接字符串
’;

数据库连接字符串可以用
NET8 EASY CONFIG
或者直接修改
TNSNAMES.ORA
里定义
.

数据库参数
global_name=true
时要求数据库链接名称跟远端数据库名称一样

数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;

查询远端数据库里的表
SELECT …… FROM
表名
@
数据库链接名
;


.
权限管理
(DCL)
语句

1.GRANT

赋于权限
常用的系统权限集合有以下三个
:
CONNECT(
基本的连接
), RESOURCE(
程序开发
), DBA(
数据库管理
)
常用的数据对象权限有以下五个
:
ALL

ON
数据对象名
,

SELECT ON
数据对象名
,

UPDATE ON
数据对象名
,
DELETE

ON
数据对象名
,

INSERT ON
数据对象名
,

ALTER

ON
数据对象名

GRANT CONNECT, RESOURCE TO
用户名
;
GRANT SELECT ON
表名
TO
用户名
;
GRANT SELECT, INSERT, DELETE ON
表名
TO
用户名
1,
用户名
2;

2.REVOKE
回收权限

REVOKE CONNECT, RESOURCE FROM
用户名
;
REVOKE SELECT ON
表名
FROM
用户名
;
REVOKE SELECT, INSERT, DELETE ON
表名
FROM
用户名
1,
用户名
2;

本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http://www.zxbc.cn/html/20071020/28290_3.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: