Jas*_*ker 80
这里的大多数答案都在正确的轨道上.但是,一行不是元组.  元组*是带有名称的无序已知值集.因此,以下元组是相同的(我使用虚构的元组语法,因为关系元组主要是理论构造):
(x=1, y=2, z=3)
(z=3, y=2, x=1)
(y=2, z=3, x=1)
...当然假设x,y和z都是整数.还要注意,没有"重复"元组这样的东西.因此,不仅上述相同,它们是相同的.最后,元组只能包含已知值(因此,没有空值).
甲行**是一组有序的已知或未知的值与名称(尽管它们可被省略).因此,以下比较在SQL中返回false:
(1, 2, 3) = (3, 2, 1)
(3, 1, 2) = (2, 1, 3)
请注意,有一些方法可以"伪造它".例如,请考虑以下INSERT声明:
INSERT INTO point VALUES (1, 2, 3)
假设x是第一个,y是第二个,z是第三个,这个查询可能会被重写为:
INSERT INTO point (x, y, z) VALUES (1, 2, 3)
或这个:
INSERT INTO point (y, z, x) VALUES (2, 3, 1)
...但我们所做的只是改变排序而不是删除它.
并且还注意到可能还存在未知值.因此,您可能拥有未知值的行:
(1, 2, NULL) = (1, 2, NULL)
...但请注意,这种比较总会产生UNKNOWN.毕竟,你怎么知道两个未知值是否相等?
最后,行可能会重复.换句话说,(1, 2)并且(1, 2)可以比较相等,但这并不一定意味着它们是相同的.
如果这是您感兴趣的主题,我强烈建议您阅读SQL和关系理论:如何通过CJ Date 编写准确的SQL代码.
* 请注意,我在谈论元组,因为它们存在于关系模型中,这与一般的数学有点不同.
**如果您想知道,SQL中的所有内容都是行或表.因此,(1, 2)是一行,VALUES (1, 2)而是一个表(有一行).
更新:我在这里的博客文章中对这个答案进行了一些扩展.
Qua*_*noi 14
这是一个缩短的" N-tuple"(如在quadruple,quintuple等等)
这是一行整行的行集.
如果您发出:
SELECT  col1, col2
FROM    mytable
,整个结果将是一个ROWSET,而每一对都col1, col2将是一个tuple.
有些数据库可以作为一个整体使用元组.
喜欢,你可以这样做:
SELECT  col1, col2
FROM    mytable
WHERE   (col1, col2) =
        (
        SELECT  col3, col4
        FROM    othertable
        )
,检查一个整体tuple从一个rowset整体匹配tuple从另一个rowset.