我目前正在大学学习数据库课程。
我们被告知要在SQL中编写查询,您必须在一个语句中执行整个查询(即,以分号结尾的一个长行)。也就是说,我们被告知无法通过
构建复杂的查询但是,您可以轻松编写执行此操作的关系代数表达式。
我的一个家庭作业问题涉及很多外部联接,并且采用上述方法将更加自然/接近我对解决方案的看法。
这让我想到:所有关系代数表达式都可以在SQL中编写吗?
答案 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;