
# 关系运算符
所有数据类型都可用关系运算符进行比较，并返回一个BOOLEAN类型的值。
关系运算符均为双目操作符，被比较的两个数据类型必须是相同的数据类型或者是可以进行隐式转换的类型。
表1关系运算符 
| 运算符                   | 返回类型    | 描述                                                           |
|:---|:---|:---|
| A = B                 | BOOLEAN | 若A与B相等，返回TRUE，否则返回FALSE。用于做赋值操作。                             |
| A == B                | BOOLEAN | 若A与B相等，返回TRUE，否则返回FALSE。不能用于赋值操作。                            |
| A \<=\> B             | BOOLEAN | 若A与B相等，返回TRUE，否则返回FALSE。若A与B都为NULL则返回TRUE，其中一个为NULL则返回FALSE。 |
| A \<\> B              | BOOLEAN | 若A与B不相等，返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。标准SQL语法。          |
| A != B                | BOOLEAN | 与\<\>逻辑操作符相同。SQL Server语法。                                   |
| A \< B                | BOOLEAN | 若A小于B，返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。                    |
| A \<= B               | BOOLEAN | 若A小于或等于B，返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。                 |
| A \> B                | BOOLEAN | 若A大于B，返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。                    |
| A \>= B               | BOOLEAN | 若A大于或等于B，返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。                 |
| A BETWEEN B AND C     | BOOLEAN | 若A大于等于B且小于等于C则返回TRUE，否则返回FALSE。若A、B、C中存在NULL，则返回NULL。        |
| A NOT BETWEEN B AND C | BOOLEAN | 若A小于B或大于C则返回TRUE，否则返回FALSE。若A、B、C中存在NULL，则返回NULL。            |
| A IS NULL             | BOOLEAN | 若A为NULL则返回TRUE，否则返回FALSE。                                    |
| A IS NOT NULL         | BOOLEAN | 若A不为NULL则返回TRUE，否则返回FALSE。                                   |
| A LIKE B              | BOOLEAN | 若字符串A与字符串B相匹配则返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。            |
| A NOT LIKE B          | BOOLEAN | 若字符串A与字符串B不相匹配则返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。           |
| A RLIKE B             | BOOLEAN | Java正则匹配，若A或其子字符串与B相匹配则返回TRUE，否则返回FALSE。若A或B为NULL，则返回NULL。   |
| A REGEXP B            | BOOLEAN | 与A RLIKE B结果相同。                                              |
   
#### 注意事项
- = 和 == 的区别：= 可用于赋值操作，== 不能用于赋值操作。
- \<=\> 是NULL安全的等值运算符，当两边都为NULL时返回TRUE。
- \<\> 是标准SQL的不等于运算符，!= 是SQL Server语法，两者逻辑相同。
- ANSI模式下（Spark 4.0默认开启），涉及NULL的比较会返回NULL而非静默处理。
 
#### 示例1：等值比较
```
SELECT 1 = 1;       -- TRUE
SELECT 1 == 2;      -- FALSE
SELECT 1 <=> 1;     -- TRUE
SELECT NULL <=> NULL; -- TRUE
```
#### 示例2：不等值比较
```
SELECT 1 <> 2;      -- TRUE
SELECT 1 != 1;      -- FALSE
SELECT 1 < 2;       -- TRUE
SELECT 2 >= 2;      -- TRUE
```
#### 示例3：范围比较和NULL判断
```
SELECT 2 BETWEEN 1 AND 3;    -- TRUE
SELECT 5 NOT BETWEEN 1 AND 3; -- TRUE
SELECT NULL IS NULL;          -- TRUE
SELECT 1 IS NOT NULL;         -- TRUE
```
#### 示例4：模糊匹配
```
SELECT 'hello' LIKE 'h%';     -- TRUE
SELECT 'hello' NOT LIKE 'a%';  -- TRUE
SELECT 'hello' RLIKE 'h.*o';   -- TRUE
SELECT 'hello' REGEXP 'h.*o';  -- TRUE
```
