SQL中的查询如何工作?

问题描述 投票:-1回答:1
select course_id
from section as S
where semester = ’Fall’ and year= 2009 and
exists (select *
from section as T
where semester = ’Spring’ and year= 2010 and
S.course_id= T.course id);

内部相关如何引用外部相关?

这里是部分关系的模式:

create table section
(course_id varchar (8),
sec_id varchar (8),
semester varchar (6),
year numeric (4,0),
building varchar (15),
room number varchar (7),
time slot_id varchar (4),
primary key (course_id, sec_id, semester, year),
foreign key (course_id) references course);
sql database rdbms
1个回答
0
投票

这是您的查询(尽管我已经更改了别名并更广泛地使用它们):

select s.course_id
from section s.
where s.semester = 'Fall' and
      s.year= 2009 and
      exists (select 1
              from section s2
              where s2.semester = 'Spring' and
                    s2.year = 2010 and
                    s2..course_id = s.course_id
--------------------^ correlation clause
             );

这显然是在2009年秋季和2010年春季的各个部分中找到的课程。

突出显示的条件称为correlation子句s.course_id指的是外部查询。

您可以将查询视为遍历外部查询的section中的行。通过“秋天”和“ 2009”过滤器的任何行都将受到exists过滤器的约束。

该过滤器再次遍历各行,在course_id上匹配并测试“ Spring”和“ 2010”。

这是概念上会发生什么。这定义了结果集的外观。实际上,数据库引擎可以实现此目的,但是它喜欢产生相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.