ORACLE基础语法学习
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