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 |
|
|
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 比對樣式
|
% |
'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 |
|
|
|
|