Questions tagged «relational-algebra»

3
子查询是否为SQL查询增加了表达能力?
SQL是否需要子查询? 想象一下关系数据库的结构化查询语言的足够通用的实现。由于规范SQL SELECT语句的结构实际上对于使其有意义很重要,因此我不直接诉诸关系代数,但是您可以通过对表达式的形式进行适当的限制来用这些术语来构架。 一个SQL SELECT查询通常由投影(的SELECT部分)的一些数目的JOIN操作(JOIN部分),一些数目的SELECTION 操作(在SQL中,WHERE条款),然后设置为单位的运算(UNION,EXCEPT,INTERSECT等),接着再SQL SELECT查询。 被连接的表可以是表达式的计算结果。换句话说,我们可以有一条语句,例如: SELECT t1.name, t2.address FROM table1 AS t1 JOIN (SELECT id, address FROM table2 AS t3 WHERE t3.id = t1.id) AS t2 WHERE t1.salary > 50,000; 我们将使用计算表作为SQL查询的一部分称为子查询。在上面的示例中,第二个(缩进的)SELECT是一个子查询。 能否以不使用子查询的方式编写所有SQL查询?上面的示例可以: SELECT t1.name, t2.address FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id …

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

6
从一组对中生成组合而无需重复元素
我有一对。每对都具有(x,y)的形式,使得x,y属于范围内的整数[0,n)。 因此,如果n为4,那么我有以下几对: (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) 我已经有一对了。现在,我必须使用n/2对构建一个组合,这样就不会重复任何整数(换句话说,每个整数在最终组合中至少出现一次)。以下是正确和不正确组合以更好地理解的示例 1. (0,1)(1,2) [Invalid as 3 does not occur anywhere] 2. (0,2)(1,3) [Correct] 3. (1,3)(0,2) [Same as 2] 一旦我有了配对,有人可以建议我一种生成所有可能组合的方法。

2
“差异”操作是否为已经包含“联接”的查询语言增加了表达能力?
集差运算符(例如,EXCEPT在某些SQL变体中)是关系代数的许多基本运算符之一。但是,有些数据库不直接支持集合差异运算符,而是支持LEFT JOIN(一种外部联接),实际上,可以使用它代替集合差异运算来达到相同的效果。 这是否意味着即使没有设置差异运算符,只要LEFT JOIN保持该运算符,查询语言的表达能力也是相同的?一个人怎么证明这一事实呢?

1
范畴论(子集)和关系代数之间是否存在同构?
它来自大数据角度。基本上,许多框架(如Apache Spark)通过提供类似Functor / Monad的接口来“补偿”缺乏关系操作,并且向cats到SQL的转换也有类似的趋势(Scala中的Slick)。例如,我们需要自然联接(假设索引上没有重复),以便从SQL角度对向量进行元素zip + map(multiply) 逐次乘法,这ElementwiseProduct在类别理论的应用程序中可以被视为(但Spark的MLib已经拥有)。 简单地说(以下示例在Scala中): 引用的join子案例可以看作是应用函子(在有序集合上),这反过来又给我们zip:List(1,2,3).ap(List(2,4,8).map(a => (b: Int) => a * b))-> (List(1,2,3) zip List(2,4,8)).map(x => x._1 * x._2)。此外,假设进行一些预处理(groupBy算符或仅仅是外推,或者通常是一种同形),我们可以将其引入其他联接。 其他联接和选择可以认为是monad。例如,WHERE只是:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)->List(1,2,2,4).filter(_ < 3) 数据本身就是ADT(GADT也是吗?),它又看起来像一个简单的Set类别(或更笼统地说-笛卡尔封闭),因此(我想)它应该涵盖基于Set的操作(由于Curry- Howard-Lambek本身)以及类似的操作RENAME(至少在实践中如此)。 聚集对应于fold/reduce(变形) 所以,我要问的是,我们可以在类别理论(也许是子类别理论)和(整个)关系代数之间建立同构吗?还是有发现的东西?如果可行,类别的什么同构子集与relalgebra同构? 您会看到我自己的假设是相当广泛的,而诸如逻辑-猫-lambda的Curry-Howard-Lambek对应之类的形式化解则更为精确-因此,实际上,我要求参考已完成的研究(该研究表明了直接的关系),以及Scala / Haskell中的更多示例。 编辑:接受的答案使我认为我将连接和条件表示为monad太过分了(尤其是使用有效实例化FALSE的空值),我认为回调至少应足以满足SQL的relegebra子集。Monad更适合诸如GROUP BY的高阶(嵌套)内容,这不是relalgebra的一部分。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.