2011年2月7日 星期一

Select 查詢方法總整理

  1. 基礎設定
  2. DATEPART 回傳時間指定部分如:時或分或年
  3. DATEDIFF 回傳開始與結束之間的差
  4. Between .. And .. 用來篩選資料範圍
  5. In 指定範圍
  6. 當遇到NULL時處理方式
  7. TSQL字元符號的使用
  8. Except 用來比較表格與表格之間,只回傳2個表格不相同部分
  9. Interset 用來比較表格與表格之間,只回傳2個表格相同部分
  10. Tablesample 用於亂數取出資料量,如果要用於採樣工作可以試試看
學習SQL語法,最基本不畏忽視SELECT,為了日後方便,整理一下
SELECT select_list
[INTO new_table_name]
FORM table_list | view_list
[WHERE search_conditions]
[GROUP BY group_by_list]
[HAVING search_conditions]
[ORDER BY order_list [ASC | DESC]]
[]:有或無都可以

Where DATEPART(datepart , date)
條件 說明
datepart

普遍使用條件

datepart 縮寫
year yyyy,yy
month mm,m
day dd,d
hour hh
minute mi,n
second ss,s
date 篩選條件必須是時間格式
範例
Select ID,date From TEST

Where DATEPART(MM,date) = 11 --找出11月份者
更詳細解說

Where DATEDIFF(datepart , startdate , enddate)
條件 說明
datepart

普遍使用條件

datepart 縮寫
year yyyy,yy
month mm,m
day dd,d
hour hh
minute mi,n
second ss,s
startdate 篩選條件必須是時間格式
enddate 篩選條件必須是時間格式
範例 Select ID,startdate,enddate From TEST
Where DATEDIFF(yyyy,startdate,enddate) < 20 ---找出年與年差未滿20年者
更詳細解說

Where id Between 1 And 5
說明 指定資料區間,常常會使用到,如年齡範圍,日期範圍,生日等等...
範例 Select ID From Test
Where ID Between 1 And 5

Where name In('Tom','Jack','Louis')
說明 搜尋清單中符合條件
範例 Select name From Test
Where name In('Tom','Jack','Louis')

當值為NULL時處理方式

尋找值為NULL
方法 說明
IS 或 IS NOT NULL 可以搜尋出NULL 或者 不是NULL的資料
name = NULL 竟可能不要使用這方法,但如果要使用必須要這樣做SET ANSI_NULLS OFFSelect name From
Where name=NULL (這樣就可以正常使用)
ISNULL() 這函式,可以幫忙解決如果是NULL則,以什麼方法顯示,如Where ISNULL(NAME,'N/A') 這樣如果NAME為NULL則以N/A字串顯示

T-SQL 字串處理方式

符號 說明
% 該符號代表1個字元以上的任意字元
_ 該符號代表任意單一字元
[-] 包含指定範圍字元 範例:'[S-V]'ing ,會搜尋出 Sing,Ting,Uing,Ving
[^] 包含不再指定範圍內 範例:'M[^c]',會搜尋第一字元為M,第二字元不為c的字串

Except 與 Interset使用方式

範例 Select name,title From Test
Except | Interset
Select name,title From Test2
多數用來比較資料表與資料表之間的不同

Tablesample 使用方式

基本語法 Select ... From ...
Tablesample (N ROWS | N PERCENT)
Repeatable(SEED)
這可以取得亂數,但卻有缺點,取得資料會是固定區塊 參考資料SQL2008 3-26頁
改良語法 Select Top 10 name,title,CHECKSUM(NEWID())
From Test
Order By CHECKSUM(NEWID())
這方法是靠NEWID()產生一組ID,在靠CHECKSUM()函式作計算,即可產生唯一數值,再靠Order By以及TOP ,就可產生完美亂數清單

沒有留言:

張貼留言