请解释一下sql中的元组是什么意思。
这里的大多数答案都在正确的轨道上。但是, 一行不是元组 。 元组*是带有名称的已知值的 无序 集合。因此,以下元组是同一件事(由于关系元组在很大程度上是理论上的构造,因此我使用了虚构的元组语法):
*
(x=1, y=2, z=3) (z=3, y=2, x=1) (y=2, z=3, x=1)
…当然假设x,y和z都是整数。还要注意,没有“重复”元组之类的东西。因此,上述条件不仅相等,而且是 同一件事 。最后,元组只能包含已知值(因此,不能为null)。
甲 行**是一组有序的已知或未知的值与名称(尽管它们可被省略)。因此,以下比较在SQL中返回false:
**
(1, 2, 3) = (3, 2, 1) (3, 1, 2) = (2, 1, 3)
请注意,尽管有一些方法可以“伪造”它。例如,考虑以下INSERT语句:
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。毕竟,您怎么知道两个未知值是否相等?
UNKNOWN
最后,行可能会重复。换句话说,(1, 2)并且(1, 2)可以比较为相等,但这并不一定意味着它们是同一回事。
(1, 2)
* 请注意,我所说的是关系模型中存在的元组,它与一般的数学有点不同。
**万一您想知道,SQL中的几乎所有内容都是行或表。因此,(1, 2)是一行,而VALUES (1, 2)表是(一行)。
VALUES (1, 2)