Select—沒你想的那么復(fù)雜
Select語(yǔ)句的基本結(jié)構(gòu)如下:
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]] |
第一行語(yǔ)句中select_list表示需要檢查的字段的列表,字段名稱間用逗號(hào)分隔
All 指明查詢結(jié)果中可以顯示值相同的列,且為系統(tǒng)默認(rèn) *
Distinct 指明查詢結(jié)果中如有值相同的列,則只顯示其中的一列 唯一值
第二行語(yǔ)句中Into子句用于把查詢結(jié)果存放到一個(gè)新建的表中 as 。。。。
new_table-name 指明新建表的名稱
第三行語(yǔ)句中Form 子句指定需要查詢的表注:只要Select中又要查詢的列就必須使用From子句
table_name / view_name 指明Select 語(yǔ)句要用到的表,視圖等數(shù)據(jù)源,該列表中的數(shù)據(jù)表名和視圖名之間使用逗號(hào)分隔
第四行語(yǔ)句中 Where子句是制定數(shù)據(jù)檢索的條件,以限制返回的數(shù)據(jù)行
第五行語(yǔ)句中Group By 子句指定查詢結(jié)果的分組條件
第六行語(yǔ)句中 Having 子句指定分組搜索條件,通常與Group By子句一起使用,它與Where語(yǔ)句類似只是其作用對(duì)象不同,Where子句作用于表和視圖,Having子句作用于組。
最后一行語(yǔ)句Order By 子句指定查詢結(jié)果的排序方式,ASC是升序(系統(tǒng)默認(rèn)),DESC 降序
下面具體介紹一下Group By 子句
ALL:表示返回所有可能的查詢結(jié)果組合,即使此組合中沒有任何滿足Where子句的數(shù)據(jù),分組的統(tǒng)計(jì)列如果不滿足查詢條件,則將由null值構(gòu)成其數(shù)據(jù)
Cube:除了返回由Group By子句指定的列外,還返回按組統(tǒng)計(jì)的行,返回的結(jié)果按分組的第一個(gè)條件列排序顯示,以此類推。統(tǒng)計(jì)行包括了Group By子句指定的列的各種組合的數(shù)
據(jù)統(tǒng)計(jì)
Rollup:只返回第一個(gè)分組條件指定的列的統(tǒng)計(jì)行,改變列的順序會(huì)使返回的結(jié)果發(fā)生變化
舉例:按所屬部門分類,找出工資大于來(lái)2000的所有員工
下面兩個(gè)圖即分別是為Cube的返回結(jié)果和Rollup的返回結(jié)果
如何提高Select語(yǔ)句的效率
1、使用exists關(guān)鍵字檢查結(jié)果集:不要用count(*)來(lái)檢查結(jié)果集中是否包含行
2、使用標(biāo)準(zhǔn)連接代替嵌套查詢:在執(zhí)行嵌套查詢時(shí),SQL Server將執(zhí)行內(nèi)部的子查詢,然后將查詢結(jié)果返回給外部查詢作為檢索的數(shù)據(jù)源,最后執(zhí)行外部的主查詢。而在執(zhí)行包含標(biāo)準(zhǔn)聯(lián)接的查詢時(shí),SQL Server將要查詢的僅僅是一個(gè)查詢
3、有效避免整表掃描:使用索引,除了缺失索引外,可能導(dǎo)致整表掃描的另一種情況是在like子句的匹配條件的開始使用了%,如果這樣將會(huì)調(diào)用整表掃描。
posted on 2012-07-17 10:32 順其自然EVO 閱讀(222) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)