
# 行表达式
行比较允许使用以下操作符=、\<\>、\<、\<=、\>、\>=。暂不支持\<=\>等操作符，或其中一个相似的语义符。
语法如下：
```
row_constructor operator row_constructor
```
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 操作符两边都是一个行构造器，两行值必须具有相同数目的字段，每一行都进行比较。
- 支持的数据类型和比较操作符一致。
 
#### \<、\<=、\>、\>=
在\<、\<=、\>、\>=的情况下，行中元素从左到右依次比较，直到遇到一对不相等的元素或者一对为空的元素。如果这对元素中存在至少一个null值，则比较结果是未知的null，否则这对元素的比较结果为最终的结果。如果最终没有匹配到不相等或者为空的元素，则认为这两行值相等，根据操作符含义判断最终结果。
示例：
```
m_db=# SELECT (1,2,NULL) < (1,3,0) AS RESULT;
  result
----------
 t
(1 row)
m_db=# SELECT (4,5,6) > (3,2,1) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (4,1,1) > (3,2,1) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT ('TEST','DATA') > ('DATA','DATA') AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (4,1,1) > (3,2,NULL) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (NULL,1,1) > (3,2,1) AS RESULT;
 result 
--------
(1 row)
m_db=# SELECT (NULL,5,6) > (NULL,5,6) AS RESULT;
 result 
--------
(1 row)
m_db=# SELECT (4,5,6) > (4,5,6) AS RESULT;
 result 
--------
 f
(1 row)
m_db=# SELECT (2,2,5) >= (2,2,3) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (2,2,1) <= (2,2,3) AS RESULT;
 result 
--------
 t
(1 row)
```
#### =、\<\>
=、\<\>和别的操作符使用略有不同。如果两行值的所有字段都是非空并且符合操作符条件，则认为两行是符合操作符条件的；如果两行值的任意字段为非空并且不符合操作符条件，则认为两行是不符合操作符条件的；如果两行值的任意字段为空，则比较的结果是未知的null。
示例：
```
m_db=# SELECT (1,2,3) = (1,2,3) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (1,2,3) <> (2,2,3) AS RESULT;
 result 
--------
 t
(1 row)
m_db=# SELECT (2,2,3) <> (2,2,NULL) AS RESULT;
 result 
--------
(1 row)
m_db=#  SELECT (NULL,5,6) <> (NULL,5,6) AS RESULT;
 result 
--------
(1 row)
```
