所有Relational Alegbra查询都可以在SQL中完成吗?

时间:2015-11-18 04:17:37

标签: sql subquery relational-algebra

我目前正在大学学习数据库课程。

我们被告知要在SQL中编写查询,您必须在一个语句中执行整个查询(即,以分号结尾的一个长行)。也就是说,我们被告知无法通过

构建复杂的查询
  • 使用查询创建一个表格" save"某个地方的某个表(可能是一种变量),
  • 然后使用不同的查询创建一个不同的表,并且"保存"它,
  • 然后最终使用这两个表(比方说,加入它们)。

但是,您可以轻松编写执行此操作的关系代数表达式。

我的一个家庭作业问题涉及很多外部联接,并且采用上述方法将更加自然/接近我对解决方案的看法。

这让我想到:所有关系代数表达式都可以在SQL中编写吗?

1 个答案:

答案 0 :(得分:0)

TL; DR 是的,任何代数表达式都可以通过子选择/子查询表示为单个SQL表达式。还有CTE(公用表表达式)(如果可用)。您可以通过添加视图或(可能是临时的)基础来使用多个SQL表达式来表达代数表达式。

您可以嵌套SELECT语句。您必须将它们放在括号中,并在FROM子句连接中为它们提供别名(通过隐式或显式AS)。 (还有Jerry Jeremiah评论。)

select * from mytable join (select x from yourtable) s

“保存”嵌套的选择值。 (Aka派生表(值)。)它给出了你将在条件中提到的subselect / subquery表中的任意行的名称。

您可以使用CTE和WITH。同样,这不会“保存”表值。 (也由a_horse_with_no_name评论。)

with c as (select a from yourtable)
select c from yourtable

您可以创建自动填充的视图。

create view v select a from yourtable;
select * from mytable join v;

您可以创建TEMPORARY TABLE。 (后来由Joel Coehoorn评论)。 (要么 只需创建永久表。)您可以插入它们然后在查询中使用。

create temporary table t as select a from yourtable;
select * from mytable join t;