SELECT語句小結

  SELECT語句是使用頻率最高、語法相對複雜的DBCC命令。下面先從最簡單也是最常用的單表查詢開始。

  1、選擇列

  (1) 用SELECT 子句來指定查詢所需的列,多個列之間用逗號分開

select p_id,p_name,cost from products
 
  (2) 可以使用符號“*”來選取表的全部列

select * from products

 
  (3) 在查詢結果中添加列

select p_id,p_name,quantity,cost,quantity*cost as sum_cost from products
 

  2、選擇行

  (1) 使用WHERE 子句

  用戶在查詢數據庫時,往往並不需要了解全部信息,而只需要其中一部分滿足某些條件的信息。在這種情況下就需要在SELECT 語句中加入條件,以選擇數據行,這時就要用到WHERE 子句。WHERE 子句中的條件是由表達式以及邏輯聯結詞AND ORNOT 等組成。

  例:查詢工資介於2000 元和3000 元之間的員工姓名。

  select e_name
  from employee
  where e_wage between 2000 and 3000

 
  (2) 使用DISTINCT關鍵字

  用戶在對數據庫進行查詢時,往往會出現重複結果,這時就需要使用DISTINCT 關鍵字消除重複部分。

  例:列出工資大於7000 的員工所屬的部門編號

  use pangu
  select distinct dept_id
  from employee
  where e_wage > 7000

 
  (3) 使用IN 關鍵字

  在使用WHERE 子句進行查詢時,若條件表達式中出現若干條件相同的情況,就會使表達式顯得冗長,不便於用戶使用,這時可用IN 關鍵字來簡化。

  例:查詢在編號爲‘1001’‘1002’的部門中工作的員工姓名

  use pangu
  select e_name
  from employee
  where dept_id in ('1001','1002')

 
  (4) 使用通配符

  在WHERE 子句中可以使用謂詞LIKE來進行字符串的匹配檢查,其中將大量使用通配符。
  例:查找姓王且名字爲兩個字的員工姓名及其部門編號
    select e_name,dept_id  
    from employee  
    where e_name like '王__'
    /*注意有兩個_,因一個漢字佔兩個字符*/
  

  如果用戶要查找的數據中本身就包含了通配符,如“SQL_Mail”,就需要使用轉義字符來區分通配符與實際存在的字符。其格式如下;

  LIKE ‘字符匹配串’ ESCAPE ‘轉義字符
  例:查找以"SQL_M"開頭,"il"結尾的對象
  select *
  from objects
  where object_name like 'SQL#_M_il' escape '#'

  
  3、 對查詢結果排序

  (1) 使用ORDER 子句

  當用戶要對查詢結果進行排序時就需要在SELECT 語句中加入ORDER BY 子句。在ORDER BY 子句中可以使用一個或多個排序要求,其優先級次序爲從左到右。

  例: 查詢工作級別爲‘2’ 的員工姓名,查詢結果按工資排序
  select e_name
  from employee
  where job_level='2'
  order by e_wage
 

  (2) 選取前幾行數據

  在SELECT 語句中使用TOP n TOP n PERCENT, 來選取查詢結果的前n 行或前百分之n 的數據。此語句經常和ORDER 子句一起使用。

 
  例: 查詢工資最高的三名員工的姓名和工資
 

  select top 3 e_name, e_wage
  from employee
  order by e_wage desc

 
  4、查詢結果分組

 
  (1) 使用GROUP 子句

 
  當用戶要對查詢結果進行分組時,就需要在SELECT 語句中加入GROUP BY 子句。

 
  例: 查詢工作級別爲'2'的員工姓名,查詢結果按部門分組
 
    select e_name,dept_id
    from employee
    where job_level='2'
    group by dept_id,e_name
  

  (2) 使用WITH { CUBE | ROLLUP }選項

 
  使用這兩個選項可以格外返回按組統計的數據行。與CUBE 不同的是,ROLLUP 選項只返回最高層的分組列(即,第一個分組列)的統計數據。二者的差別請看下面的例子。

 
:查詢公司編號、公司所訂購的產品編號和應支付的金額,查詢結果按公司編號和產品編號分組。

  
  /*使用cube選項*/
  select firm_id,p_id,sum(o_price*o_quantity) as sum_value
  from orders
  group by firm_id,p_id with cube

   

  運行結果如下:

  

 
  /*使用rollup選項*/
  select firm_id,p_id,sum(o_price*o_quantity) as sum_value
  from orders
  group by firm_id,p_id with rollup
  
  運行結果如下:
  
  

 
  (3) 使用HAVING 子句

  HAVING 子句用來選擇特殊的組,它將組的一些屬性與常數值進行比較,如果一個組滿足HAVING 子句中的邏輯表達式,它就可以包含在查詢結果中。
 

  例:查詢有多個員工工資不低於6000的部門編號

 

    select dept_id,count(*)
    from employee
    where e_wage>=6000
    group by dept_id
    having count(*)>1

 
 
  注意:

  在SELECT語句中WHEREGROUP BYHAVING子句和統計函數的執行次序如下:WHERE子句從數據源中去掉不符合其搜索條件的數據行;GROUP BY 子句蒐集數據行到各個組中;統計函數爲各個組計算統計值;HAVING子句去掉不符合組搜索條件的各組數據行。

 

 

待續…… 


參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章