1. 程式人生 > >Oracle相關的一些知識

Oracle相關的一些知識

字串函式
LENGTH()    字元長度
LENTTHB()    位元組長度;一個漢字記憶體中佔用 2位元組

LTRIM、RTRIM、TRIM

截串
SUBSTR(表示式,位置,長度)
Oracle 無左右取串函式,但可以使用變通方式完成。
左取串:    SUBSTR('abcdefg', 1, 3)
右取串:    SUBSTR('abcedfg', LENGTH('abcdefg')-3+1, 3)


時間函式
sysdate、current_day
設定時間格式:    ALERT SESSION SET NLS_DATE_FORMAT = 'dd-mon-yyyy HH:mi:ss'
求時間:        NEXT_DAY(sysdate, '星期三')


轉換函式

TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss')
TO_DATE('12-3月-04')
TO_NUMBER('333')        必須是能轉換
TO_TIMESTAMP('2007-10-10 00:00:00.0', 'yyyy-mm-dd hh24:mi:ssxff')    轉換為時間戳格式

聚合函式
count(*)    :查詢錶行數
count(column)    :查詢列行數,會忽略空值,注意
ps.聚合函式不能做為 where 裡查詢條件出現(因為聚合是對所有查詢結果的運算?)


其他函式

USER:當前使用者
SUM(DECODE(SEX, '男', 1, 0))    篩選出行被為男的記錄 並加1
SUM(DECODE(SEX, '女', 1, 0))    篩選出行被為女的記錄 並加1
NVL(a2, '非輸入')        布林值判斷,利用系統對空值進行處理
SELECT DISTINCT a1 FROM aa   


表連線
內連線:查詢時,把能夠公共匹配的資料完全查詢出來。
    FROM e, d WHERE e.id = d.id
    標準: FROM e JOIN d ON e.id = d.id

外連線:不完全匹配
  左連線:  FROM e JOIN d ON e.id = d.id(+)
    左邊資料全部顯示,右邊匹配不上的部分用空值代替
  右連線:  FROM e JOIN d ON e.id(+) = d.id
    (同理左連線)


子查詢

    無關子查詢
    相關子查詢

EXISTS():    根據子查詢返回是否存在資料來決定父查詢。

UNION:        將多個查詢出來的資訊行整合成一個結果集。
  SELECT eid, ename FROM e
  UNION
  SELECT id, name FROM d
  ps.UNION 查詢出來的重複記錄不會顯示,UNION ALL 則顯示全部(包括重複的)。

INTERSECT:    返回查詢出來資訊行的交集,Oracle 獨有。

利用查詢結果批量更新:
  INSERT INTO e(eid, ename) SELECT id, name FROM d
或者利用查詢結果建立新表:
  CREATE TABLE ttt AS ttt (SELECT * FROM e)


附加:
SQL 簡介
SQL (Structured Query Language,結構化查詢語言)支援如下類別命令:
資料定義語言:CREATE(建立)、ALTER(更改)、TRUNCATE(截斷)、DROP(刪除)命令。
資料操縱語言:INSERT(插入)、SELECT(選擇)、DELETE(刪除)、UPDATE(修改)命令。
事務控制語言:COMMIT(提交)、SAVEPOINT(儲存點)、ROLLBACK(回滾)命令。
資料控制語言:GRANT(授予)、REVOKE(回收)命令。

特點:
1、非過程語言,它同時可以訪問多條記錄。
2、所有關係型資料庫的通用型語言,可移植性強。
3、對於資料和物件的操作簡單。


資料定義語言
    用於改變資料庫結構,包括建立、修改和刪除資料庫物件。

1CREATE TABLE 建立表
CREATE TABLE [schema.]table
(columname    datetype [, .]);

.表名的最大長度為30個字元;
.表名首字母為字母,可以用下劃線、數字和字母,但不能使用空格和單引號;
.同一使用者模式下的不同表不能有相同的名稱;
.表名、列名、使用者名稱、和其他物件名不區分大小寫,系統會自動轉換成大寫。


2ALTER TABLE 修改表
ALTER TABLE <tablename>
    MODIFY (column definition);
    ADD (column definition);
    DROP COLUMN column;

3TRUNCATE TABLE 擷取表
TRUNCATE TABLE <tablename>
    快速刪除記錄並釋放空間,不使用事務處理,無法回滾,效率高。

DESC <tablename>  查看錶結構

4DROP TABLE 刪除表
DROP TABLE <tablename>




資料操縱語言
DISTINCT 防止選擇重複的行。



事務控制語言
COMMIT  提交併結束事務處理。
SAVEPOINT  儲存點,將很長的事務處理劃分為較小的部分,用於標記事務中可以應用回滾的點。
ROLLBACK  用來撤銷在當前的事務中已完成的操作。可以回滾整個事務處理;也可以將事務回滾到某個儲存點。

UPDATE xxx;
 SAVEPOINT mark1;
DELETE FROM xxx;
 SAVEPOINT mark2;
 ROLLBACK TO SAVEPOINT mark1;
 COMMIT;



資料控制語言  
為使用者提供許可權控制命令。

授予物件許可權
GRANT SELECT,UPDATE  ON   order_master
  TO MARTIN;

取消物件許可權
REVOKE SELECT,UPDATE  ON  order_master
  FROM MARTIN;




SQL 操作符

算術操作符
    算術表示式有 NUMBER 資料型別的列名、數值常量和連線它們的算術操作符組成。(+ - * /


比較操作符
    用於比較兩個表示式的值。
    =!=<><=>=BETWEEN  AND (檢查是否在兩個值之間)
    [NOT] IN(與列表中的值匹配)  
    [NOT] LIKE(匹配字元模式,  * _  萬用字元) 
    [NOT] IS NULL(檢查是否為空)


邏輯操作符
    用於組合生成一個真或假的結果。AND OR NOT

集合操作符
    集合操作符將兩個查詢的結果組合成一個結果集合。
    UNION(聯合)         返回兩個查詢選定不重複的行。(刪除重複的行)
    UNION ALL(聯合所有)  合併兩個查詢選定的所有行,包括重複的行。
    INTERSECT(交集)     只返回兩個查詢都有的行。
    MINUS(減集)         在第一個查詢結果中排除第二個查詢結果中出現的行。 (第一 -- 第二)


使用集合操作符連線起來的 SELECT 語句中的列應遵循以下規則:
.通過集合操作連線的各個查詢相同列數,匹配列的資料型別;
.這種查詢不應含有 LONG 型別的列;
.列標題來自第一個 SELECT 語句。


SELECT orderno FROM order_master
  UNION 
SELECT orderno FROM order_detail;




連線操作符 (||
    用於將兩個或者多個字串合併成一個字串,或者將一個字串與一個數值合併在一起。
SELECT ('供應商'|| venname || '的地址是' || venaddress)
  FROM vendor_master




Oracle 常用資料型別

1、字元資料型別
CHAR        固定長度字串        長度 1~2000個位元組,未指定則預設為 1位元組
VARCHAR2    可變長度字串        長度 1~4000個位元組,定義時必須指定大小
LONG        可變長度字串        最多能儲存 2GB,儲存超過 VARCHAR2 的長文字資訊
                    ps.一個表中只有一列為 LONG 資料型別,
                      .LONG 列不能建立索引,
                      .儲存過程不能接受 LONG 資料型別的引數


2、數值資料型別
NUMBER 資料型別可以儲存 正數、負數、零、定點數(不帶小數點的?)和精度為38為的浮點數。
格式: NUMBER [(precision 精度,數字總位數 1~38間
        , scale 範圍,小數點右邊的位數 -84~127間)]


3、時期時間資料型別
DATE 資料型別,用於儲存表中日期和時間資料。SYSDATE 函式功能就是返回當前的日期和時間。
TIMESTAMP 資料型別,儲存時期、時間和時區資訊。SYSTIMEATAMP 功能就是返回當前日期、時間和時區。


4、二進位制資料型別
RAW        二進位制資料或位元組串    長度 12000 位元組,定義時應指定大小,可建索引
LONG RAW     可變長度的二進位制資料    最大能儲存 2GB,限制等同於 LONG 資料型別


5、LOB 資料型別
“大物件”資料型別,最多可儲存多達 4GB的資訊。LOB 可以是外部的,也可以是內部的,取決於相對於資料庫位置。
CLOB        Character LOB        儲存大量的字元資料
BLOB        Binary LOB        儲存大量的二進位制物件(多媒體物件等)
BFILE        Binary FIle        能夠將二進位制檔案儲存在資料庫外部的作業系統檔案中
                    BFILE 儲存一個 BFILE 定位器,它指向位於伺服器檔案系統上的二進位制檔案。
ps.一個表中可以有多個 LOB 列,每個 LOB 列可以是不同的 LOB 型別。



6、偽列
Oracle 中的一個表列,但實際上未儲存表中。可以從表中查詢,但是不能插入,更新或者刪除。

ROWID     返回行記錄的行地址,通常情況下,ROWID 值可以唯一地標識資料庫中的一行。
作用:    .能最快形式訪問表中的一行。
    .能顯示錶中的行是如何儲存的。
    .可以作為表中行的唯一標識。
例:SELECT ROWID, * FROM EMP  WHERE empno='7900';


ROWNUM    返回一個數值單錶行的次序,第一行為1,第二行為2.
    通過使用 ROWNUM 使用者可以限制查詢返回的行數(或者分頁?)
例:SELECT * FROM EMP WHERE ROWNUM <= 10;




Oracle 函式
    函式接受一個或多個引數並返回一個值。

單行函式
    也稱標量函式,對於從表中查詢的每一行,該函式都返回一個值。
    單行函數出現在 SLEECT / WHERE 子句中。

1、日期函式
    對日期值進行運算,根據用途產生日期/數值型別的結果。
ADD_MONTHS(d, n)    返回 指定日期加上月數後的 日期值
MONTHS_BETWEEN(d1, d2)    返回 兩個日期間的 月數
LAST_DAY(d)        返回 指定日期當前的最後一天的 日期值
RONUD(d,[fmt])        返回 指定日期四捨五入格式(YEARMONTHDAY)後的 日期值
NEXT_DAY(d,day)        返回 指定日期下一個星期幾的 日期值
TRUNC(d,[fnt])        返回 指定日期截斷為格式後的 日期值
EXTRACT(fmt FROM d)    返回 指定日期提取的格式的 值 


2、字元函式
    字元函式接受字元輸入,並返回字元或數值。
INITCAP(char)        首字母大寫
LOWER(char)        轉換為小寫
UPPER(char)        轉換為大寫
LTRIM(charset)    左裁切
RTRIM(charset)    右裁切
TRANSLATE(charfromto)        按字母翻譯
REPLACE(char, search_str, replace_str)    字串替換
INSTR(char, substr[,pos])        查詢子串位置
SUBSTR(char, pos, len)            取子字串
CONCAT(char1, char2)            連線字串

CHR(ascii)        根據 ASCII 碼返回對應字串
LPAD / RPAD        左 / 右 填充
    LPAD ('function'15 , '=') 返回    '=======function'
TRAM            開頭或結尾(或 開頭和結尾)裁剪特定的字元,預設裁剪空格。
    TRIM ([LEADING | TRAILING] trim_char)
LENGTH(char)        返回字串長度
DECODE            逐個值進行字串替換
    DECODE (expr, search1, result1, search2, result2, [ ,default])
    DECODE (ostalus, 'p''準備處理''c''已完成')



3、數字函式
    數字函式接受數字輸入並返回數值作為輸出結果。
ABS(n)        取絕對值
CEIL(n)        向上取值
FLOOR(n)    向下去整
SIN(n)        正弦值
COS(n)        餘弦值
POWER(m, n)    指數函式
SQRT(n)        平方根
MOD(m, n)    取餘
ROUND(m, n)    小數點後精度四捨五入
TRUNC(m, n)    小數點後精度截斷


4、轉換函式
    轉換函式將一種資料型別轉換為另一種資料型別。
TO_CHAR (d|n, [,fmt])        格式化 日期 / 數值
TO_DATE (char [,fmt])        將 fmt模型格式的字串 轉換為日期型
TO_NUMBER (char)        將 包含數字的的字串轉換為 數值型


5、其他函式
NVL (exp, exp2)        如果 exp 為空返回 exp2;如果非空返回 exp
NVL2 (exp, exp2, exp3)    如果 exp 為空返回 exp3;如果非空返回 exp2
NULLIF (exp1, exp2)    比較兩表示式,相等返回空值,不等則返回 exp1





分組函式 / 聚合函式
    分組函式基於一組行返回結果,即為每一組行返回單個值。

AVG (columname)         返回指定列的平均值
MAX (columname)         返回指定列的最大值
MIN (columname)         返回指定列的最小值
SUM (columname)         返回指定列的總值
COUNT    
    COUNT (*)        統計所有行個數,包括重複行和空值得行
    COUNT (columname)    統計指定列非空值的個行數
    COUNT (DISTINCR columname)    統計指定列中 非重複,非空值得行個數    


GROUP BY 子句    用於將資訊表劃分為組,對查詢結果按組進行聚合運算,為每組返回一個結果。HAVING 子句    用來指定 GROUP BY 子句的檢索條件。分析函式    分析函式根據一組行來計算聚合值。這些函式通常用來完成對聚集的累積排名、移動平均數和報表計算。    分析函式與聚合函式不同的是他們為每組記錄返回多個行。ROW_NUMBER () OVER ([PARTITION BY colum] ORDER BY colum)    為有序組中的每一行返回一個唯一的排序值,序號由 ORDER BY 子句指定,從 1 開始,即使具有相等的值,排位也不同。    PARTITION BY colum 按列值進行區分,各分組內在進行排序。RANK () OVER ([PARTITION BY colum] ORDER BY colum)    計算一個值在一個組中的地位,由 1 開頭,具有相等值得行排位相同,序數隨後跳躍相應的數值。DENSE_RANK () OVER ([PARTITION BY colum] ORDER BY colum)    計算一個值在一個組中的地位,由 1 開頭,具有相等值得行排位相同,並且排位是連續的。


5、[轉] 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 EXPR2ELSE               RETURN EXPR1---------------------------------------------------------------DECODE(AA﹐V1﹐R1﹐V2﹐R2.)函式解釋: IF AA=V1 THEN RETURN R1IF AA=V2 THEN RETURN R2..…ELSERETURN 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, 降序是DESCSELECT欄位名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;=============================================================================================*********************************************************************************************=============================================================================================

 


=============================================================================================
                二.資料定義 (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)

 

ORACLE裡常用的資料物件

 

許可權管理(DCL)

--------------------------------------------------------------------------------

=====================================================================
            使用表示式
=====================================================================

Select  ename || '   是一位   ' || job As 僱員細節,
        to_char(hiredate,'yyyy-mm-dd'As 僱傭時間,
        sal*1.2
From emp;

=====================================================================
            取消重複行 distinct
=====================================================================

Select Distinct deptno, job From emp;

=====================================================================
            指定列排序 order by
=====================================================================
asc 升序,desc 降序
--------------------------------------------
Select * From emp
where sal between 1500 and 3000
Order By deptno Desc,ename;

--------------------------------------------
如果使用dsitinct,排序列必須是選擇列
---------------------------
select distinct depton, job 
from emp
order by job;
---------------------------------------------
order by 子句必須是最後一個子句