我刚刚开始学习SQL集,但是在开始时没有给出什么是集合的定义,只提到了UNIONS和INTERSECTS。
示例SQL:
SELECT * FROM sales2005
UNION
SELECT * FROM sales2006;
答案 0 :(得分:3)
集合的日常概念是事物或价值观的集合,每个事物或价值观最多只出现一次,并且没有订单。
我们可以询问某个事物/值是否属于特定集合,即它是否是它的一个元素,即它是它的成员。相关操作中有两组UNION,它给出了其成员位于其中一组或两组中的组。 INTERSECTION提供两组中的一组值。两组的差异是一组值,它们是一个而不是另一个的成员。 “”空“集是没有成员的集合。
在关系上下文中,我们有时会将表视为一组行。它们必须共享相同数量的列,有时还包含相同的列名称列或列名列表。 (然后只有一个空表。)其他时候我们将表视为一组行加上所需的共享列数,列名称列或列名列表。 (然后,由于列的数量和/或名称很重要,没有行的两个表可以是不同的表。)但即使是这样的表也会被称为集合。
在SQL上下文中,表是行的集合加上(非空)列名列表。但收藏品不是套装,而是包装袋。包是一组值,其中相同的值可以多次显示为成员。只要我们只处理任何值只出现一次成员的行李,我们就可以将它们视为集合。 (SQL表在其他方面与关系表不同。)有时他们只是懒得得到被调用的集。
SQL的厚重之处在于它同时具有UNION(DISTINCT)和UNION ALL。 UNION ALL返回其包成员是参数包的成员的表,每个表显示它在参数包中的总次数。但UNION(DISTINCT)返回的表格的包就是那样,但每个成员只有一个外观。它的包就像一组行,它们作为参数袋的成员出现。
关于持有集合的表的PS推理很简单。每个表都包含将一些填充(命名)空白语句转换为真实语句的行。 (空格以列命名,并且它们由行中的相应值填充。)假设具有列T1,T2,...的表T保持行“... T1 ... T2 ...”为真。然后是两张桌子R& S R UNION S
包含使“...... R1 ... R2 ... OR ... S1 ... S2 ...”为真的元组,而R JOIN S
保存“。 ..R1 ... R2 ... AND ... S1 ... S2 ......“是的。对于其他表和逻辑运算符等等。但是关于箱包没有像这样的简单规则。重复行的存在使得SQL查询比使用关系表的查询更难以推理。 UNION(DISTINCT)和SELECT DISTINCT用于删除重复项。