SQL初学者:子查询

时间:2016-09-23 21:32:31

标签: sql oracle

select tenant_name, tenant_dob
from tenant
where rental_no = (select rental_no
                    from rental
                    where apt_no = 203);

问题是列出住在apt 203的租户的名称和DOB。上面的查询是正确的。我的编码如下。我知道我没有使用子查询语句。实际上,我只需简单地记住学校考试问题的子查询语句,但我想知道何时必须使用子查询,以及为什么我必须使用子查询。另外,请告诉我关于使用子查询的必须知道的事情。

select tenant_name, tenant_dob
from tenant
where rental_no = 203;

1 个答案:

答案 0 :(得分:0)

在您的情况下,使用连接会更好。

select t.tenant_name, t.tenant_dob
from tenant t join rental r on t.rental_no = r.rental_no
where t.rental_no = apt_no = 203;

您加入租户和租赁,因此他们被数据库视为一个。 接下来,您定义过滤器谓词,即apt_no = 203。 最后,您可以选择要返回的属性(t.tenant_name, t.tenant_dob)。

这是在关系数据库中解决此任务的概念上正确的方法。

当您的过滤(where子句)很复杂时,子查询很有用,并且使用连接表示它会弄乱您的代码。在这种情况下,它可以大大简化您的查询,但在您的情况下,它恰恰相反。

为什么我必须使用子查询?您希望根据表B中的某个谓词从表A中选择一行。您需要A和B之间的链接。在子查询中表B中的选定键,以在表A中找到合适的行。

相关问题