【发布时间】:2015-11-18 04:17:36
【问题描述】:
我目前正在大学学习数据库课程。
我们被告知要在 SQL 中编写查询,您必须在一个语句中完成整个查询(即,以分号结尾的长行)。也就是说,我们被告知没有办法通过
构建复杂的查询- 使用查询创建一个表并将该表“保存”在某个地方(可能在某种变量中),
- 然后使用不同的查询创建一个不同的表并“保存”它,
- 然后最后使用这两个表(例如,加入它们)。
但是,您可以轻松编写执行此操作的关系代数表达式。
我的一个作业问题涉及很多外部连接,采用上述方法会更自然/更接近我对解决方案的看法。
这让我想到:所有关系代数表达式都可以用 SQL 编写吗?
【问题讨论】:
-
为什么不能 ypu
select * from (select * from A) A outer join (select * from B) B on A.x == B.x这不行吗? -
嗯。它可能!我得试试看。我从未见过 (select * from A) A [即我想要“将表从查询中保存到变量中”] 的构造,我的教授强烈暗示 SQL 中不存在这样的构造......
-
您可以“创建一个表并“保存”它”使用通用表表达式:
with t1 as (select * from foo), t2 as (select * from bar) select * from t1 join t2 on t1.id = t2.other_id;。有关示例,请参见此处:postgresql.org/docs/current/static/queries-with.html -
您也可以使用临时表...但您不应该做这些事情。关系代数很好,但使用临时表来完成它就很糟糕了。
标签: sql subquery relational-algebra