请解释一下sql中的元组是什么意思?谢谢..
10 回答
这里的大多数答案都在正确的轨道上。但是,一行不是元组。 元组*
是具有名称的已知值的无序集。因此,以下元组是相同的(我使用虚构的元组语法,因为关系元组在很大程度上是一种理论结构):
(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)
and(1, 2)
可能比较相等,但这并不一定意味着它们是同一件事。
如果这是您感兴趣的主题,我强烈建议您阅读SQL and Relational Theory: How to Write Accurate SQL Code by CJ Date。
*
请注意,我说的是元组,因为它们存在于关系模型中,这与一般的数学有点不同。
**
以防万一您想知道,SQL 中的几乎所有内容都是行或表。因此,(1, 2)
是一行,VALUES (1, 2)
而是一个表(只有一行)。
更新:我在这里的博客文章中对这个答案进行了一些扩展。
这是一个缩短的“ N-tuple
”(如 inquadruple
等quintuple
)
它是作为一个整体的行集的一行。
如果您发出:
SELECT col1, col2
FROM mytable
,整个结果将是 a ROWSET
,并且每一对col1, col2
将是 a tuple
。
一些数据库可以作为一个整体使用元组。
就像,你可以这样做:
SELECT col1, col2
FROM mytable
WHERE (col1, col2) =
(
SELECT col3, col4
FROM othertable
)
,它检查一个整体是否tuple
与另一个rowset
整体匹配。tuple
rowset
在关系数据库中,表是关系(在数学意义上)。关系是一组元组。因此关系数据库中的表行是关系元组。
维基关系:
在数学中(更具体地说,在集合论和逻辑中),关系是将真值分配给 k 个个体的组合(k 元组)的属性。通常,该属性描述了 k 元组的组件之间的可能连接。对于给定的一组 k 元组,根据属性是否成立,为每个 k 元组分配一个真值。
无论在数学中使用什么,RDBMS 中的元组通常被认为是表或结果集中的一行。在 RDBMS 中,元组是无序的。MDDBMS 中的元组是单元格中的数据实例及其关联的维度实例(成员)。
列族数据存储中的元组是什么?
元组 = 1 条记录;n-tuple = 'n' 记录的有序列表;Elmasri Navathe 书(第 198 页,第 3 版)。
记录 = 有序或无序。
据我了解,一个表具有一组键 K 和一个具有域 K 的键入函数 T。表的一行或“元组”是具有域 K 的函数 r,使得 r(k) 是 T 的一个元素(k) 对于每个密钥 k。因此,该术语具有误导性,因为“元组”实际上更像是一个关联数组。
数据库表中的行
元组是用于关联关系数据库中的表的已知值。
元组用于引用关系数据库模型中的一行。但是元组与行有一点区别。
元组用于定义来自多维数据集的数据切片;它由一个或多个维度的一个成员的有序集合组成。元组用于识别多维数据集中的多维数据的特定部分;由多维数据集中每个维度的一个成员组成的元组完整地描述了一个单元格值。