1. 程式人生 > >Select—沒你想的那麼複雜

Select—沒你想的那麼複雜

  Select語句的基本結構如下:

                     Select  [All | Distinct]  select_list

                         [Into [new_table-name]]

                        Form {table_name | view_name}

                              [,{table_name2 | view_name2}

                              ….,{table_name10|view_name10}]

                              [Where search_conditions]

                              [Group By group_by_list]

                              [Having search_conditions]

                              [Order By order_list [ASC| DESC]]

       第一行語句中select_list表示需要檢查的欄位的列表,欄位名稱間用逗號分隔

       All 指明查詢結果中可以顯示值相同的列,且為系統預設

       Distinct 指明查詢結果中如有值相同的列,則只顯示其中的一列

       第二行語句中Into子句用於把查詢結果存放到一個新建的表中

        new_table-name 指明新建表的名稱

       第三行語句中Form 子句指定需要查詢的表注:只要Select中又要查詢的列就必須使用From子句

       table_name / view_name 指明Select 語句要用到的表,檢視等資料來源,該列表中的資料表名和檢視名之間使用逗號分隔

       第四行語句中 Where子句是制定資料檢索的條件,以限制返回的資料行

       第五行語句中Group By 子句指定查詢結果的分組條件

       第六行語句中 Having 子句指定分組搜尋條件,通常與Group By子句一起使用,它與Where語句類似只是其作用物件不同,Where子句作用於表和檢視,Having子句作用於組。

       最後一行語句Order By 子句指定查詢結果的排序方式,ASC是升序(系統預設),DESC 降序

下面具體介紹一下Group By 子句

        ALL:表示返回所有可能的查詢結果組合,即使此組合中沒有任何滿足Where子句的資料,分組的統計列如果不滿足查詢條件,則將由null值構成其資料

        Cube:除了返回由Group By子句指定的列外,還返回按組統計的行,返回的結果按分組的第一個條件列排序顯示,以此類推。統計行包括了Group By子句指定的列的各種組合的數

據統計

        Rollup:只返回第一個分組條件指定的列的統計行,改變列的順序會使返回的結果發生變化

舉例:按所屬部門分類,找出工資大於來2000的所有員工

          下面兩個圖即分別是為Cube的返回結果和Rollup的返回結果



如何提高Select語句的效率

1,使用exists關鍵字檢查結果集:不要用count(*)來檢查結果集中是否包含行

2,使用標準連線代替巢狀查詢:在執行巢狀查詢時,SQL Server將執行內部的子查詢,然後將查詢結果返回給外部查詢作為檢索的資料來源,最後執行外部的主查詢。而在執行包含標準聯接的查詢時,SQL Server將要查詢的僅僅是一個查詢

3,有效避免整表掃描:使用索引,除了缺失索引外,可能導致整表掃描的另一種情況是在like子句的匹配條件的開始使用了%,如果這樣將會呼叫整表掃描。