SQL_T_SELECT

SQL_T_SELECT

Select 總論

Select 

column  
From table  
 [ Join ] joins  
 [ Where ] search_condition  
 [ Group By] grouping_columns  
 [ Having ] search_condition  
 [ Order By ] sort_columns  


1. Select From   所有Select出來的結果為原始、沒有格式化的值。自己要利用其他工具來格式化自己想要的資料格式

Select * From authors 擷取所有欄位

Select city From authors

擷取一個欄位
Select au_fname, au_lname, city, state From authors 擷取多個欄位
 


2. As 建立欄位別名.....如果欄位名稱是隱密的、很難輸入的、太長、太短..就使用欄位別名

Select  
  au_fname       As "SUM" ,
  • 如果將別名放在 " " 中 , 就可以使用保留字做為欄位別名。
  • 命名衍生的欄位 , (其值由運算式所決定 , 原本在表格裡是不存在的資料)。
  • 也可利用As 建立表格別名
  (Num1+Num2) As "Total" ,
  state                  As "Country" ,
From authors  


3. Distinct 消除重複的列

Select Distinct  state , city
  • 空值Null彼此永遠不會相等, 因為它們的值是未知的 ,但Distinct 會認為Null是重覆的
  • 欄位超過一個時 , 所有欄位的結合值決定是否重覆:例
    Select * From table
    Select Distinct * From table ..傳回一樣的..因為每一列的總合是唯一的

  • 左邊範例要找出state和city兩個欄位加起來是唯一的
From authors
 


4. Order By 排序列

Select columns From table
  • ASC    遞增排列 (預設)    DESC  遞減排列
  • 排序的欄位不一定要列在 columns 之中 ,即使沒有select city時也可以用city來排序
  • 排序字串決定於DBMS所使用的字元集 。 當Null排序時 , 被認為彼此相等
  • 影響排序速度的因素
    所選擇的列數目
    在 Order By 中欄位的數目
    在 Order By 中欄位的長度
  • 你應該為你經常排序的欄位建立索引
  • 可以排序 欄位名稱、相對欄位 (數字) 、運算式 ( price * 5) 、欄位別名
  • 在某些DBMS中某些資料型態是無法排列的 例 image欄位
          Order By columns [ASC | Desc] ,
      columns2 [ASC | Desc] ,
      columns3 [ASC | Desc] ,
      columns4 [ASC | Desc]
也可以 Order By 2 , 3
或 Select 1 ,2*3 as "5" from t order by "5"


5. Where  過濾列

 =    <>    <    <=    >    >= 日期時間必須有相同的欄位 才能有意義地比較
 Like 只能比較相同或類似的資料型態 ,如果比較不同類型
 可能傳回錯誤
 比較值為不相等並且傳回沒有列的結果
 嘗試轉換為一般型態 , 如果不成功就傳回錯誤
空值代表未知 , 且不會有任何符合的東西 , 要比較空值時須用
   Where Columns IS Null , where colms = Null 是錯誤的

無法在Where子句中使用 SUM( ) 或  Count( ) 等聚合函數。
 Between
 In
 IS Null
 
"Select title_name , price * sales As 'Revenue' from titles where price * sales >= 1000000"


6. And 、OR、Not 結合和否定條件

And 1.執行順序 Not --> And --> OR
OR
Not


7. Like 比對樣式

  • Like只能作用於字串,數字或日期就不能
 % 'A%' -----符合A*的字串
'%S'  -----符合*S的字串
'%in%'-------符合*in*的字串....包含 in , tintt , intttt
 _ ' ____ '    -------任何四個字元的字串
' Qua__ '  ------任何Qua開頭加二個字元的所有字串, 共五個字
' _re_ '
' _re% '
' %re_ '
 ! ESCAPE(跳脫)符號:用來搜尋萬用字元在SQL裡的字串 , 例...可用來搜尋含有 % 或 _ 的字串
Access不支援所以用以下的方法!
例 ' 100!% ' '!_OP' 找出 "100%" 及 "_OP" 的字串
[ ] Access用的

' [a-c]at '..................符合 a到c的字元 + at字元
' [bcf]at '..................符合 b 或 c 或  f 的字元 + at字元
' [^c]at '...................符合不是cat的所有字元
' se[^n]%  '..............符合se* 但不是sen*的字串
  1. 可用 Not Like '%12%'
2. 萬用字元搜尋比較花時間 ,
3. Where name like 'LIN'  其實興  Where name = 'Lin' 是一樣的..但 = 比 like 快
4. Microsoft Access 不支援 !  ,  而是使用 []


8. Between 作範圍過濾, 在特定範圍

Where Between  var1 And var2
  • Between 可以用於字串 , 數字 , 日期時間
  • 字串比較根據 DBMS而決定
  • Between 搜尋出來的值會包含 var1及 var2 如果想排除 var1 及 var2時 , 須要變成
    where (text > var1) And (text < var2)
  • 可以利用NOT Between 否定 Between條件 , 也可以利用 And , Or 結合 Between
Where Not Between  var1 And var2


9. In 作清單過濾

Where columns IN ( Var1 , Var2 )
  • In 能作用於字元字串、數字及日期時間。
  • Where columns IN (var1,var2) = Where (columns =var1) Or (columns=var2)
  • 字串比較還是根據DBMS來決定的
  • 如果清單包含很多值 ,使用 IN 會比使用OR來得好
  • 可以利用 Not IN 否定 IN 的條件 , 也可以用 AND 和 OR 要結合條件
Where columns Not IN ( Var1 , Var2 )


10. IS Null 測試空值

Where Columns IS NULL
  • NULL 代表遺失或未知的值
  • LIKE 、Between、IN和其他Where子句無法找到null , 因為未知的值不滿足特定條件 ,  null不符合任何值 , 即使 是null 之間也彼此不相等
  • IS NULL 可以作用在任何資料型態的欄位
  • 可以用 Not IS NULL 否定其條件 , 也可以利用 And Or 結合其條件
Where Columns IS Not NULL