
# 行表达式
语法如下：
```
row_constructor operator row_constructor
```
两边都是一个行构造器，两行值必须具有相同数目的字段，每一行都进行比较，行比较允许使用=，\<\>，\<，\<=，\>=等操作符，或其中一个相似的语义符。
对于\<，\<=，\>，\> =的情况下，行中元素从左到右依次比较，直到遇到一对不相等的元素或者一对为空的元素。如果这对元素中存在至少一个null值，则比较结果是未知的（null），否则这对元素的比较结果为最终的结果。如果最终没有遇到不相等或者为空的元素，则认为这两行值相等，根据操作符含义判断最终结果。
不支持对XML类型数据操作。
示例：
```
openGauss=# SELECT ROW(1,2,NULL) < ROW(1,3,0) AS RESULT;
  result
----------
 t
(1 row)
openGauss=# select (4,5,6) > (3,2,1) as result;
 result 
--------
 t
(1 row)
openGauss=# select (4,1,1) > (3,2,1) as result;
 result 
--------
 t
(1 row)
openGauss=# select ('test','data') > ('data','data') as result;
 result 
--------
 t
(1 row)
openGauss=# select (4,1,1) > (3,2,null) as result;
 result 
--------
 t
(1 row)
openGauss=# select (null,1,1) > (3,2,1) as result;
 result 
--------
(1 row)
openGauss=# select (null,5,6) > (null,5,6) as result;
 result 
--------
(1 row)
openGauss=# select (4,5,6) > (4,5,6) as result;
 result 
--------
 f
(1 row)
openGauss=# select (2,2,5) >= (2,2,3) as result;
 result 
--------
 t
(1 row)
openGauss=# select (2,2,1) <= (2,2,3) as result;
 result 
--------
 t
(1 row)
```
=，\<\>和别的操作符使用略有不同。如果两行值的所有字段都是非空并且符合操作符条件，则认为两行是符合操作符条件的；如果两行值的任意字段为非空并且不符合操作符条件，则认为两行是不符合操作符条件的；如果两行值的任意字段为空，则比较的结果是未知的（null）。
示例：
```
openGauss=# select (1,2,3) = (1,2,3) as result;
 result 
--------
 t
(1 row)
openGauss=# select (1,2,3) <> (2,2,3) as result;
 result 
--------
 t
(1 row)
openGauss=# select (2,2,3) <> (2,2,null) as result;
 result 
--------
(1 row)
openGauss=# select (null,5,6) <> (null,5,6) as result;
 result 
--------
(1 row)
```
