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
總結
以上是生活随笔為你收集整理的ORACLE基础语法学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORACLE的基本语法集锦
- 下一篇: 买二手房需要找一手代理人吗,看房经常是一