SQL書寫規範

2021-08-20 03:07:24 字數 3057 閱讀 8586

1、 語句中出現的所有表名、欄位名全部小寫,系統保留字、內建函式名、sql保留字大寫(sql不區分大小寫)。 

2、 連線符or、in、and、以及=、!=、<、>、<=、>=、<>等前後加上乙個空格。 

3、 對較為複雜的sql語句加上注釋,說明演算法、功能。 

注釋風格:注釋單獨成行、放在語句前面。 

(1) 應對不易理解的分支條件表示式加注釋; 

(2) 對重要的計算應說明其功能; 

(3) 過長的函式實現,應將其語句按實現的功能分段加以概括性說明; 

(4) 每條sql語句均應有注釋說明(表名、欄位名)。 

(5) 常量及變數注釋時,應注釋被儲存值的含義(必須),合法取值的範圍(可選) 

(6) 可採用單行/多行注釋。(-- 或 /* */ 方式) 

4、 sql語句的縮排風格 

(1) 一行有多列,超過80個字元時,基於列對齊原則,採用下行縮排 

(2) where子句書寫時,每個條件佔一行,語句令起一行時,以保留字或者連線符開始,連線符右對齊。 

5、 多表連線時,使用表的別名來引用列。 

6、 供別的檔案或函式呼叫的函式,絕不應使用全域性變數交換資料; 

7、 變數令名不能超出oracle的限制(30個字元),令名要規範,要用英文令名,從變數上能看到變數的作用,如 

g名稱 全域性變數 

m名稱 區域性變數 

c名稱 游標 

p名稱 引數

8、 查詢資料庫表或檢視時,只能取出確實需要的那些字段,不要使用*來代替所有列名。要清楚明白地使用列名,而不能使用列的序號。 

9、 功能相似的過程和函式,盡量寫到同乙個包中,加強管理。 

如例(1)

1、避免巢狀連線。例如:a = b and b = c and c = d 

2、where條件中儘量減少使用常量比較,改用主機變數 

3、系統可能選擇基於規則的優化器,所以將結果集返回資料量小的表作為驅動表(from後邊最後乙個表)。 

4、大量的排序操作影響系統效能,所以儘量減少order by和group by排序操作。 

如必須使用排序操作,請遵循如下規則: 

(1) 排序盡量建立在有索引的列上。 

(2) 如結果集不需唯一,使用union all代替union。 

5、索引的使用。 

(1) 盡量避免對索引列進行計算。如對索引列計算較多,請提請系統管理員建立函式索引。 

(2) 盡量注意比較值與索引列資料型別的一致性。 

(3) 對於復合索引,sql語句必須使用主索引列 

(4) 索引中,盡量避免使用null。 

(5) 對於索引的比較,盡量避免使用not=(!=) 

(6) 查詢列和排序列與索引列次序保持一致 

6、盡量避免相同語句由於書寫格式的不同,而導致多次語法分析,盡量使用bind變數。 

7、盡量使用共享的sql語句。 

8、查詢的where過濾原則,應使過濾記錄數最多的條件放在最前面。 

9、任何對列的操作都將導致表掃瞄,它包括資料庫函式、計算表示式等等,查詢時要盡可能將操作移至等號右邊。 

10、in、or子句常會使用工作表,使索引失效;如果不產生大量重複值,可以考慮把子句拆開;拆開的子句中應該包含索引。

1、盡量少用巢狀查詢。如必須,請用not exist代替not in子句。如例(2) 

2、用多表連線代替exists子句。如例(3) 

3、少用distinct,用exists代替 如例(4) 

4、使用union all、minus、intersect提高效能 

5、使用rowid提高檢索速度。對select得到的單行記錄,需進行delete、update操作時,使用rowid將會使效率大大提高。 

6、使用優化線索機制進行訪問路徑控制。 

7、使用cursor時,顯示游標優於隱式游標

本規範示例:

select aka042 -- 單位繳費劃入個人帳戶比例 

into prm_aaa043

from ka01 --醫療保險單位繳費劃入個人帳戶比例分段資訊

where akc021 = rec_kc01.akc021 -- 醫療人員類別

and aka041 >= rec_kc01.akc023 -- 年齡上限

and aka040 = prm_date or aae031 is null ); -- 終止時間

x select ...... 

from emp

where dept_no not in ( select dept_no

from dept

where dept_cat='a');

o select ......

from emp e

where not exists ( select 'x'

from dept

where dept_no=e.dept_no

and dept_cat='a');

x select ...... 

from emp

where exists ( select 'x'

from dept

where dept_no=e.dept_no

and dept_cat='a');

o select ......

from emp e,dept d

where e.dept_no=d.dept_no

and dept_cat='a';

x select distinct d.dept_code,d.dept_name 

from dept d ,emp e

where e.dept_code=d.dept_code;

o select dept_code,dept_name

from dept d

where exists ( select 'x'

from emp e

where e.dept_code=d.dept_code);

sql語句書寫規範

一 sql書寫規範 1 sql語句的所有表名 欄位名全部小寫,系統保留字 內建函式名 sql保留字大寫。2 連線子or in and 以及 等前後加上乙個空格。3 對較為複雜的sql語句加上注釋,說明演演算法 功能。注釋風格 注釋單獨成行 放在語句前面。1 應對不易理解的分支條件表示式加注釋 2 對...

SQL語言書寫規範(持續更新)

這週在幫同事的安裝程式中嵌入mysql時,遇到在linux平台移植dml指令碼錯誤的問題,具體定位到是mysql在window平台預設對錶名大小寫不敏感,而mysql在linux平台預設表面是大小寫敏感的。由於sql語言沒有官方的書寫規範,因此每個人在編寫儲存過程中遵循的都是不同的規則,而差的sql...

CSS 書寫規範

本文是參考了css森林中的規範,並結合之前幾個專案積累所書寫的乙個基本規範。不敢說是原創,所以鄭重感謝一下css森林。同時,本文件也處於持續改進中。1.基本 css檔案中,選擇器書寫按照 標籤 標籤偽類 id 類 覆蓋 排序,同一型別寫在一起 進行覆蓋時,也按照這樣乙個順序。css定義中,屬性的書寫...