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;
答案 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中找到合适的行。