天天看點

讀《程式員的SQL金典》[1]--基礎資料檢索

前言

《程式員的SQL金典》這本書是楊中科老師的,拜讀了一下,簡單做了讀書筆記供以後翻閱。僅供學習分享,要想細讀的話推薦購買原版呀!

這次讀書的時候用了新的辦法把看書計劃進行了量化,雖然簡單,發現還是有效果的。

讀《程式員的SQL金典》[1]--基礎資料檢索

Count(*)統計結果集總條數;

Count(column)統計結果集中column字段不為null的總條數。

為了實作動态拼接查詢條件的功能,有時我們會使用where 1=1這樣看似聰明的解決方案。但實際上會造成很大的性能損失,這個條件使得資料庫無法使用索引等優化查詢政策,資料庫會進行全表掃描。當資料量較大的時候查詢速度可能會變得很慢。(在SQL Server2012等資料庫中,對這種情況其實已經做了優化)

優化前:

<a></a>

可以改用下面的邏輯實作。

分組查詢時,所有SELECT語句中出現的列必須出現在Group By子句中(聚合函數除外。)

執行個體:

①錯誤

--選擇清單中的列 'T_Employee.FSalary' 無效,因為該列沒有包含在聚合函數或 GROUP BY 子句中。

②正确

FAge     (無列名) 22     1200.00 23     5000.00 25     8300.00 28     6200.00

①聚合函數不能出現在where語句中,此時可以使用having語句代替。

②HAVING子句位置要在GROUP子句之後;

③HAVING子句也可以像where一樣使用較複雜的過濾條件

ROW_NUMBER()函數可以計算資料的行号。但該函數不能放在WHERE子句中,如果想根據行号進行過濾可以使用子查詢來實作。

DISTINCT是針對這個結果集取消重複的,而不是針對單個列。

①LEN(string)可以計算字段的長度。

②SUBSTRING(str,start,length):

字元串截取函數。str表示原字元串,start為開始位置(從1開始計算),length為截取的長度。

執行結果:

FName     NameLength Tom     To Jerry     Je Jane     Ja

UNION可以進行結果集的合并。如果想合并之後自動去掉重複行,可以使用UNION ALL.

    本文轉自 陳敬(Cathy) 部落格園部落格,原文連結:http://www.cnblogs.com/janes/p/3573923.html,如需轉載請自行聯系原作者