SQL指令語法速查手冊(九)

集合運算子

UNION 運算子

語法
<SELECT敘述句> UNION <SELECT敘述句>

說明
UNION 運算子是用來求取聯集的運算子。我們可以使用這個運算子來對多個SELECT敘述句所查詢的結果作聯集處理。
如果只有指定UNION運算子的話,會傳回除去重複部分的聯集。但是若指定是ALL運算子的話,就會傳回沒有除掉重複部分的聯集。在實用上,多個SELECT敘述句由UNION運算子來連結,所以UNION運算子屬於集合運算子。

範例:
SELECT ID FROM homework UNION SELECT ID FROM student;
若加上 UNION ALL 運算子指令,會將進行運算的所有資料顯示出來。

EXCEPT 運算子

語法
<SELECT 敘述句> EXCEPT <SELECT 敘述句>

說明
EXCEPT 運算子是用來求取差集合的運算子。EXCEPT會由左邊指定的查詢果中,除去右邊指定的查詢結果中後傳回差集合。撰寫時,要在EXCEPT運算子左邊撰寫被減去的集合,在右邊撰寫減去的集合。

範例
SELECT ID FROM homework EXCEPT SELECT ID FROM student;

單項運算子

+ 單項運算子

語法
+ <數值式>

範例
SELECT price, +price FROM store;

說明
+ 單項運算子並非加法運算子,他可以用來明確表示數值為正數運算子。但是 + 單項運算子並不會進行任何處理,所以在資料處理上沒有任何意義。

– 單項運算子

語法
- <數值式>

範例
SELECT cost, -cost FROM store;

說明
- 單項運算式用來將數值符號進行反轉的運算子。- 單項運算子可以將正數變為負數,將負數變為正數。

IS (NOT) NULL運算子

語法
式 IS (NOT) NULL

範例
SELECT * FROM store WHERE ID IS NULL;

說明
IS NULL 運算子是用來確認式中的值是否為NULL運算子。NULL在資料庫上是用來表示沒有的值。
比較運算子中的等於以及不等於運算子,並沒有辦法對NULL進行比較,所以沒辦法判斷值是否為NULL。要確認是否為NULL的話,只能使用IS NULL 運算子。
本例為空值。
相反地,設定為非空的話,就會顯示所有值。
SELECT * FORM store where ID IS NOT NULL;

CASE 運算子

語法
CASE 式 WHEN 條件 THEN 輸出 ....END

範例
SELECT ID,CASE WHEN 1 THEN 'first' WHEN 2 THEN 'second' WHEN 3
THEN 'third' ELSE 'other' END FROM store;

說明
CASE 運算子主要是用來轉換值的運算子。在CASE後面指定的式中如有WHEN中指定條件的情形下,會轉換為THEN中所指定的輸出的值。這樣的組合可以重複指定。而最後透過ELSE指令,ELSE指令則是若不是WHEN中指定條件時,則會轉換為ELSE中指定的值。最後要撰寫END用以表示結束。

SQL指令語法速查手冊(八)

邏輯運算子

AND運算子

語法
條件式 AND 條件式
範例:
SELECT * FROM store WHERE class='household' AND price>70;

BETWEEN 運算子

語法
敘述式 BEWTEEN 數值1 AND 數值2
範例:
SELECT * FROM store WHERE price BEWTEEN 10 AND 40;

IN 運算子

語法
敘述式 IN (數值1,數值2)
範例:
SELECT * FROM store WHERE class IN ('office','food')
說明:
IN運算子是用來判斷再子查詢或者清單中具有與指定的值一致的值。在IN運算子前面賦予的值,如果在IN後面子查詢的結果清單中,或者在數值式的清單中具有相同一致的值的話,則會回傳真;如果沒有一致的值的話,則會回傳假。

NOT運算子

語法
NOT 式
範例
SELECT * FROM store WHERE NOT class='food';
說明
NOT 運算子是當右邊的式之值為真時回傳假,為假時回傳真的運算子。

OR運算子

語法
條件式 OR 條件式
範例
SELECT * FROM store WHERE class='food' OR class='office';

ALL 運算子

語法
WHERE 式 比較運算子 ALL (子查詢)
範例
SELECT * FROM store WHERE class = ALL(SELECT class FROM store WHERE class='food');
說明
ALL 運算子是用來由子查詢所傳回來的結果中,滿足所有條件的資料。ALL運算子會依據比較運算子來對每一個值與式子的值進行比較,對所有值都滿足條件時傳回真。例如子查詢的結果傳回三個值,三個值會與比較運算子中指定的條件做判斷,當滿足所有指定條件時回傳真。反之,只要具有任一不滿足的條件則傳回假。傳回真的值會被傳回主查詢中。

ANY運算子

語法
WHERE 式 比較運算子 ANY (子查詢)
範例
SELECT * FROM store WHERE class= ANY (SELECT class FROM store
WHERE class='food');
說明
ANY 運算子是用來求子查詢所傳回結果的值中,滿足任一條件的資料。ANY 運算子會依據比較運算子將每一個值與運算式中的值進行比較,只要滿足其中一條件就會傳回真。例如子查詢傳回三個值得話,這三個值都會對比較運算子中指定的條件進行判斷,只要滿足其中一條件的話就會回傳真。

ANY 與SOME運算子式相同的計算方式。另外如果要求滿足所有條件的時候,則使用ALL運算子。

EXISTS 運算子

語法
WHERE EXISTS (子查詢)
範例
SELECT * FROM store WHERE EXISTS (SELECT class FROM store WHERE class = 'food');

說明
EXISTS 運算子是用來確認子查詢所傳回的結果集合中,是否存在結果的運算子。當存在的情形下則傳回真。

SOME運算子

語法
WHERE 式 比較運算子 SOME(子查詢)
範例
SELECT * FROM store WHERE class = SOME(SELECT class FROM store WHERE class='food');

說明
功能與ANY運算子相同的功能。

LIKE 運算子

語法
式 LIKE<搜尋條件>
範例
SELECT * FROM store WHERE price LIKE '4%';

說明
LIKE運算子又稱為萬用字元搜查。
萬用字元搜查顧明思義就是透過萬用字元%來進行搜尋,語法為(LIKE%xxx%)則會傳回內容包含xxx的值;如果要搜尋開頭為xxx,語法為(LIKExxx%);搜尋結尾為xxx,語法為(LIKE%xxx)。

REGEXP運算子

語法
式 REXGEXP 正規表達式
REXGEXP運算子是用來進行POSIX正規表達式的樣式比對運算子。其與LIKE相同,但是在指定樣式時可以使用正規表示式。
引數為中介字元,有以下幾種:
^ :對字串開頭進行比對
$ :對字串結尾做比對
. :對所有文字進行比對
a* :對連續0個以上的a進行比對
a+ :對連續1個以上的a進行比對
a? :對0個或1個以上的a進行比對
de|abc :對連續的de或abc進行比對
(abc)* :對連續0個以上的abc進行比對
(abc)+ :對連續1個以上的abc進行比對
(abc)- :對0個或1個以上的abc進行比對
{} :指定樣式的重複
[] :指定候選文字的集合

範例
SELECT * FROM store WHERE name REGEXP 'c+';
說明:搜尋字串有c的資料。

範例
SELECT * FROM store WHERE name REGEXP '(tooth)+';
說明:搜尋字串有tooth的資料。