是否可以在 SQL 中完成所有关系代数查询?

Can all Relational Alegbra queries be done in SQL?

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

我们被教导要在 SQL 中编写查询,您必须在一条语句中完成整个查询(即,以分号结尾的一长行)。也就是说,我们被教导没有办法通过

构造一个复杂的查询

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

我的一个作业问题涉及很多外连接,采用上述方法会更自然/更接近我对解决方案的看法。

这让我思考:所有的关系代数表达式都可以写成 SQL 吗?

TL;DR 是的,任何代数表达式都可以通过 subselects/subqueries 表示为单个 SQL 表达式。如果可用,也可以通过 CTE(常见的 table 表达式)。您可以通过添加视图或(可能是临时的)基使用多个 SQL 表达式来表达代数表达式。

您可以嵌套 SELECT 语句。您必须将它们放在括号中,并在 FROM 子句连接中给它们一个别名(通过隐式或显式 AS)。 (Jerry Jeremiah 也发表了评论。)

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

不是 "save" 嵌套的 select 值。 (又名派生 table(值)。)它为您将在条件中提及的 subselect/subquery table 中的任意行指定一个名称。

您可以使用 CTE 和 WITH。同样,这不是 "save" 一个 table 值。 (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;

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

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