596
英雄聯盟
比較運算符__運算符_SQL語法參考_雲數據庫 OceanBase-阿裏雲
OceanBase比較的策略是,先將操作數轉換為相同的類型,然後進行比較。所有比較運算符的返回類型為Bool或者NULL。比較結果為真則返回“1”,為假則返回“0”,不確定則返回“NULL”。
數值比較
比較運算符用於比較兩個數值的大小。OceanBase支持的比較運算符如下表所示。
表達式 | 含義 | 舉例 |
= | 等於。 | SELECT 1=0, 1=1, 1=NULL; |
>= | 大於等於。 | SELECT 1>=0, 1>=1, 1>=2, 1>=NULL; |
> | 大於。 | SELECT 1>0, 1>1, 1>2, 1>NULL; |
<= | 小於等於。 | SELECT 1<=0, 1<=1, 1<=2, 1<=NULL; |
< | 小於。 | SELECT 1<0, 1<1, 1<2, 1<NULL; |
!=或<> | 不等於。 | SELECT 1!=0, 1!=1, 1<>0, 1<>1, 1!=NULL, 1<>NULL; |
數值比較運算符的類型轉換規則如下表所示。
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | NULL | |
INT | INT | FLOAT | DOUBLE | Error | ?INT | Error | NULL |
FLOAT | FLOAT | DOUBLE | Error | ?FLOAT | Error | NULL | |
DOUBLE | DOUBLE | Error | ?DOUBLE | Error | NULL | ||
TIMESTAMP | TIMESTAMP | ?TIMESTAMP | Error | NULL | |||
VARCHAR | VARCHAR | ?BOOL | NULL | ||||
BOOL | BOOL | NULL | |||||
NULL | NULL |
注意:
- “?”開頭的類型表示會在執行的時候嚐試轉換到指定類型,如果轉換失敗則報錯。
- BOOL類型比較時,False小於True。
[NOT] BETWEEN … AND …
判斷是否存在或者不存在於指定範圍。
Oceanbase>SELECT 2 BETWEEN 1 AND 2, 3 NOT BETWEEN 1 AND 2, 1 BETWEEN null AND 0, 1 NOT BETWEEN null AND 0G
*************************** 1. row ***************************
2 BETWEEN 1 AND 2: 1
3 NOT BETWEEN 1 AND 2: 1
1 BETWEEN null AND 0: 0
1 NOT BETWEEN null AND 0: 1
1 row in set (0.01 sec)
示例
有兩張表,emp雇員信息表(員工姓名、工資等信息)和salgrade工資等級表(工資範圍和工資等級);現要查詢員工姓名、工資以及工資等級信息。
Oceanbase>select * from emp; //雇員信息表
+--------+----------+
| ename | sal |
+--------+----------+
| Jerry | 25000.00 |
| Larry | 40000.00 |
| Maggie | 46000.00 |
| Micky | 15000.00 |
+--------+----------+
4 rows in set (0.00 sec)
Oceanbase>select * from salgrade; //工資等級表
+-------+----------+----------+
| grade | losal | hisal |
+-------+----------+----------+
| 1 | 10000.00 | 20000.00 |
| 2 | 20001.00 | 30000.00 |
| 3 | 30001.00 | 40000.00 |
| 4 | 40001.00 | 50000.00 |
| 5 | 50001.00 | 90000.00 |
+-------+----------+----------+
5 rows in set (0.00 sec)
Oceanbase>select a1.ename, a1.sal, a2.grade from emp a1, salgrade a2 where a1.sal between a2.losal and a2.hisal; //通過between...and...設定查詢條件
+--------+----------+-------+
| ename | sal | grade |
+--------+----------+-------+
| Micky | 15000.00 | 1 |
| Jerry | 25000.00 | 2 |
| Larry | 40000.00 | 3 |
| Maggie | 46000.00 | 4 |
+--------+----------+-------+
4 rows in set (0.00 sec)
[NOT] IN
判斷是否存在於指定集合。
Oceanbase>SELECT 2 IN (1, 2), 3 IN (1, 2)G;
*************************** 1. row ***************************
2 IN (1, 2): 1
3 IN (1, 2): 0
1 row in set (0.00 sec)
IS [NOT] NULL | TRUE | FALSE | UNKNOWN
判斷是否為NULL、真、假或未知。如果執行成功,結果是TRUE或者FALSE,不會出現NULL。
左參數必須是BOOL類型,或者是NULL,否則報錯。
Oceanbase>SELECT 0 IS NULL,
-> NULL IS NULL, NULL IS TRUE,
-> (0>1) IS FALSE,
-> NULL IS UNKNOWN,
-> 0 IS NOT NULL,
-> NULL IS NOT NULL,
-> NULL IS NOT TRUE,
-> (0>1) IS NOT FALSE,
-> NULL IS NOT UNKNOWNG;
*************************** 1. row ***************************
0 IS NULL: 0
NULL IS NULL: 1
NULL IS TRUE: 0
(0>1) IS FALSE: 1
NULL IS UNKNOWN: 1
0 IS NOT NULL: 1
NULL IS NOT NULL: 0
NULL IS NOT TRUE: 1
(0>1) IS NOT FALSE: 0
NULL IS NOT UNKNOWN: 0
1 row in set (0.00 sec)
向量比較運算符
向量比較運算符對兩個向量(ROW)進行比較,支持“<”、“ >”、“=”、“<=”、“>=”、 “!=”、“<=>”、“in”和“not in”等操作符。這幾個操作符都是二元操作符,被比較的兩個向量的維度要求相同。
“<=>”表示NULL-safe equal,這個操作符和=操作符執行相同的比較操作,不過在兩個操作碼均為NULL時,其所得值為1而不為NULL,而當一個操作碼為NULL時,其所得值為0而不為NULL。
表達式(1,2)和ROW(1,2)有時被稱為行構造符。兩者是等同的,在其它的語境中,也是合法的。例如,以下兩個語句在語義上是等同的(但是目前隻有第二個語句可以被優化):
SELECT * FROM t1 WHERE (column1, column2) = (1, 1);
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;
向量比較操作符和普通操作符相比主要有以下不同:
- 如果兩個操作數的第i個標量的比較就決定了比較結果,則不再繼續比較後續的數值。
向量比較操作符需要注意以下幾點:
多元向量比較,關鍵字ROW可以省略。例如,ROW(1,2,3) < ROW(1,3,5)等價於(1,2,3) < (1,3,4)。
in/not in操作一定是向量操作,表示左參數(不)在右集合內,集合用“()”括起。例如, 1 in (2, 3, 1)。
in/not in操作需要左右操作數對應位置的標量都是可以比較的,否則返回錯誤。例如,ROW(1,2) in (ROW(1,2), ROW(2,3), ROW(3,4))成功,ROW(1,2) in (ROW(2,1), ROW(2,3), ROW(1,3,4))失敗。
Oceanbase>SELECT ROW(1,2) < ROW(1, 3),
-> ROW(1,2,10) < ROW(1, 3, 0),
-> ROW(1,null) < ROW(1,0),
-> ROW(null, 1) < ROW(null, 2),
-> ROW(1,2) in (ROW(1,2), ROW(2,3), ROW(3,4), ROW(4,5)),
-> 1 in (1,2,3),
-> 1 not in (2,3,4),
-> ROW(1,2) not in (ROW(2,1),ROW(2,3), ROW(3,4)),
-> NULL = NULL,
-> NULL <=> NULL,
-> NULL <=> 1,
-> 1 <=> 0 G;
*************************** 1. row ***************************
ROW(1,2) < ROW(1, 3): 1
ROW(1,2,10) < ROW(1, 3, 0): 1
ROW(1,null) < ROW(1,0): NULL
ROW(null, 1) < ROW(null, 2): NULL
ROW(1,2) in (ROW(1,2), ROW(2,3), ROW(3,4), ROW(4,5)): 1
1 in (1,2,3): 1
1 not in (2,3,4): 1
ROW(1,2) not in (ROW(2,1),ROW(2,3), ROW(3,4)): 1
NULL = NULL: NULL
NULL <=> NULL: 1
NULL <=> 1: 0
1 <=> 0: 0
1 row in set (0.00 sec)
最後更新:2016-11-23 16:03:54
上一篇:
算術運算符__運算符_SQL語法參考_雲數據庫 OceanBase-阿裏雲
下一篇:
位運算符__運算符_SQL語法參考_雲數據庫 OceanBase-阿裏雲
規格報價__公眾趨勢分析-阿裏雲
查詢共享帶寬包監控信息__監控相關接口_API參考_專有網絡 VPC-阿裏雲
如何備案?__備案基礎介紹_備案須知_備案-阿裏雲
域名合法性__附錄_API文檔_域名-阿裏雲
VirtualBorderRouterForPhysicalConnectionSetType__數據類型_API 參考_雲服務器 ECS-阿裏雲
資源操作__常用命令_基本介紹_大數據計算服務-阿裏雲
ALIYUN::ECS::DiskAttachment__資源列表_資源編排-阿裏雲
ForwardEntrySetType__數據類型_API 參考_雲服務器 ECS-阿裏雲
發送普通消息(三種方式)__Java SDK_TCP 接入(專業)_消息隊列 MQ-阿裏雲
檢測IP信息__輔助工具接口_API 手冊_CDN-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲