oracle sql基礎學習篇《一》
阿新 • • 發佈:2019-02-03
每個RDBMS都基於標準sql走出了屬於自己的sql特色。oracle也不例外。現起,我們來學習oracle sql。
學習sql,於開發者,實現優秀的業務邏輯;於管理者,完成資料庫的調優。
oracle sql可分:
a)select
b)DML:update,insert,delete,merge
c)DDL:create,alter,drop
d)DCL:grant,revoke
e)TCL:commit,roolback,savepoint
oracle 資料型別共有:
1)整數型別
oracle中沒有專門的整數型別,因此,需要使用number(10)來表示整形。
2)數值型別
number(m,n)
m:所有有效數字的位數
n:小數點後的位數
3)字元型別
char(m):定長
varchar2(m):變長,max為m
4)日期時間型別
date:日期時間資料
timestamp:時間戳(是具有法律效益的電子憑證)
5)二進位制型別
blob:儲存視訊,圖片等
在寫sql語句時,建議分行來寫,因為RDBMS是根據行號來提示錯誤資訊的。而且,也可以提高可讀性。在使用主鍵時,最佳實踐是使用邏輯主鍵而不是業務主鍵。所以,避免使用聯合主鍵,因為,聯合主鍵基本都是有業務含義的。而且,聯合主鍵也不適合建立外來鍵約束。
外來鍵是關係型資料庫的第三維。定義:foreign key (欄位名) references 目標表名 (被參照的欄位名)。複雜的業務便是通過外來鍵約束來實現的。
修改已有資料表
增加欄位:alter table table_name add 欄位名 欄位型別;
刪除欄位:alter table table_name drop 欄位名;
如果在表之間存在外來鍵關聯,對被引用表執行drop table table_name時會報錯。必須先刪除引用表!
對於一些受限操作,我們可採取新建表來變通我們想要的功能。
上面談的都是對錶的操作。接下來,我們來聊聊對資料的操作。
使用外來鍵約束,所插入的資料必須在被引用表中存在。更新表,set後可多列同時更新,用逗號分隔。加上where子句可過濾所需的行。
delete from table_name where ...,是吃光碗裡的飯;drop table...則是吃光碗裡的飯還將碗給砸了。
oracle很少涉及到雙引號。列別名,就是其中一例。通過雙引號,我們可以控制列名的輸出格式。
NULL幾乎不佔儲存。如果在null和0選,建議儲存null,而非0.
對於_或%打頭的欄位,模糊查詢時須轉義。如:
like '\%%' escape '\'
like '\_%' escape '\'
聚合函式count使用上的小區別。如:
count(*):統計結果集的總條數
count(name):統計結果集中name不為null的記錄的總條數
對於order by的多個排序規則,order by首先按照第一個排序規則進行排序,如果第一個排序規則無法區分兩條記錄的順序,則按照第二個排序規則進行排序,如果第二個排序規則無法區分兩條記錄的順序,則按照第三個排序規則進行排序,以此類推。
學習sql,於開發者,實現優秀的業務邏輯;於管理者,完成資料庫的調優。
oracle sql可分:
a)select
b)DML:update,insert,delete,merge
c)DDL:create,alter,drop
d)DCL:grant,revoke
e)TCL:commit,roolback,savepoint
oracle 資料型別共有:
1)整數型別
oracle中沒有專門的整數型別,因此,需要使用number(10)來表示整形。
2)數值型別
number(m,n)
m:所有有效數字的位數
n:小數點後的位數
3)字元型別
char(m):定長
varchar2(m):變長,max為m
4)日期時間型別
date:日期時間資料
timestamp:時間戳(是具有法律效益的電子憑證)
5)二進位制型別
blob:儲存視訊,圖片等
在寫sql語句時,建議分行來寫,因為RDBMS是根據行號來提示錯誤資訊的。而且,也可以提高可讀性。在使用主鍵時,最佳實踐是使用邏輯主鍵而不是業務主鍵。所以,避免使用聯合主鍵,因為,聯合主鍵基本都是有業務含義的。而且,聯合主鍵也不適合建立外來鍵約束。
外來鍵是關係型資料庫的第三維。定義:foreign key (欄位名) references 目標表名 (被參照的欄位名)。複雜的業務便是通過外來鍵約束來實現的。
修改已有資料表
增加欄位:alter table table_name add 欄位名 欄位型別;
刪除欄位:alter table table_name drop 欄位名;
如果在表之間存在外來鍵關聯,對被引用表執行drop table table_name時會報錯。必須先刪除引用表!
對於一些受限操作,我們可採取新建表來變通我們想要的功能。
上面談的都是對錶的操作。接下來,我們來聊聊對資料的操作。
使用外來鍵約束,所插入的資料必須在被引用表中存在。更新表,set後可多列同時更新,用逗號分隔。加上where子句可過濾所需的行。
delete from table_name where ...,是吃光碗裡的飯;drop table...則是吃光碗裡的飯還將碗給砸了。
oracle很少涉及到雙引號。列別名,就是其中一例。通過雙引號,我們可以控制列名的輸出格式。
NULL幾乎不佔儲存。如果在null和0選,建議儲存null,而非0.
對於_或%打頭的欄位,模糊查詢時須轉義。如:
like '\%%' escape '\'
like '\_%' escape '\'
聚合函式count使用上的小區別。如:
count(*):統計結果集的總條數
count(name):統計結果集中name不為null的記錄的總條數
對於order by的多個排序規則,order by首先按照第一個排序規則進行排序,如果第一個排序規則無法區分兩條記錄的順序,則按照第二個排序規則進行排序,如果第二個排序規則無法區分兩條記錄的順序,則按照第三個排序規則進行排序,以此類推。