select count(ID)
from student
where dept_name = (select dept_name
from instructor
where ID = '14364'
);
我知道select运算符返回一个关系。但是,dept_name应该等于值(varchar)。 那么,为什么这个查询有效呢? 隐式转换意味着与值的关系(上下文中的varchar)
答案 0 :(得分:2)
这是一个关于SQL机制的好问题。
您正在使用单个值的上下文中使用子查询。这样的子查询称为标量子查询。标量子查询返回一个值,如果在期望标量的表达式中使用它,则SQL会将此值视为单个变量。 FROM
子句中的相同查询将返回关系。
这样的子查询通常有两个属性:
如果子查询返回多行,则会出现错误。如果它返回零行,则值为NULL
。
每当您在查询中引用多个表时,我强烈建议您始终使用表别名和限定列名:
select count(s.ID)
from student s
where s.dept_name = (select i.dept_name
from instructor i
where i.ID = 14364
);
此外,如果ID是数字,则不要使用单引号。