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