標籤:

讓SQL語句更可讀

好幾次面對很多人的時候,我問有多少人享受寫SQL的過程,經常會有一兩個,然後我會問有多少人享受閱讀別人寫的SQL語句,每次都是零人。原因是人們寫的SQL代碼實在太糟糕了,不是說它們沒法完成工作,而是人們傾向於把SQL跟其他語言區別對待,所以沒有遵守很好的代碼規範。怎麼讓SQL代碼更加可讀,下面是我的一些建議。

一行一件事

一行里只放一個列/表/組合。這會讓SQL代碼看起來很啰嗦,但更容易閱讀和編輯。下面是例子:

SELECT name,n agenFROM personsn

對齊條件語句

看到上面的語句,你會知道name, age其實是同一行,這樣做對於不同的列很適合,不過對於AND和GROUP BY這樣的語句,通常不會這麼做,你會看到一些區別:

SELECT name,n locationnFROM personsnWHERE sex = femalenAND age < 30n

或者這樣會更清晰:

SELECT name,n locationnFROM personsnWHERE sex = femalen AND age < 30n

分組或排序時使用列的名字

如果第三列值是 SUM(money),可以很簡單地排序,ORDER BY 3, 但最好還是使用 ORDER BY SUM(money), 這樣不會引起誤解。

注釋

你經常會在代碼里增加註釋,但是對於資料庫查詢卻很少注釋。也許你會增加一些奇怪的功能,或者有其他需要說明的事情,用 -- 可以讓你在行內添加註釋。當然你可能會寫很多,但一些基本的簡單注釋還是需要的。

大小寫

如你所看到的,按照大小寫標準使用查詢語句非常方便。堅持大寫所有的SQL命令,會讓人很容易看清楚哪個是命令,哪個是列名或其他項目。

CTEs

CTE (Common Table Expression), 指把常用的表達式取一個名字,在接下來的第一個語句中重複使用,跟定義一個函數類似。

WITH Good_girlnASn(nSELECT name,n locationnFROM personsnWHERE sex = femalen AND age < 30n)nnSELECT name FROM Good_girln

確實,CTE可能成為優化的阻礙。但它們可以讓你的查詢語句更加可讀。對於不熟悉的人來說,CTE似乎只能用於執行它的那一條語句而已。但是你可以讓後面的CTE引用前面的CTEs, 這樣你可以逐漸搭建起你的SQL代碼塊。我不會重複講太多,但如果你不了解CTE,或者沒用過它們,那你必須試試。CTEs是我每天都會使用的少數SQL語句之一,非常簡單便捷。

結論

當然啦,讓SQL更加可讀不只有這些方法,但希望這些會對你有幫助。

編譯自:

Writing more legible SQL Craig Kerstiens

推薦閱讀:

沒有任何基礎的人怎麼學SQL?
索引列只要參與了計算, 查詢就會不走索引, 為什麼 MySQL 不對這種情況進行優化?
請教一下大家,關於 MySQL 百萬數據量的 count(*) 查詢如何優化?

TAG:SQL | MySQL |