当前位置: 代码迷 >> Oracle面试 >> 关于sql语言的一个疑义
  详细解决方案

关于sql语言的一个疑义

热度:990   发布时间:2013-02-26 00:00:00.0
关于sql语言的一个疑问
SQL语言中有个问题一直想不明白。
有这么一个问题,假如我有两张表table1与table2,现在我要返回table1.A = table2.B的行,那么我可以这么写:
select *
from table1
where table1.A=table2.B;
那么这么做是不报错的,我想实现的时候应该是这个样子的:把table1中的每一个A中的值依次和table2中的每一个B中的值比较,如果相同则返回。那么时间复杂度应该是N exp 2
如果我的设想是正确的话,那么看下面这个问题:
找出table1中C属性值在table2中>100的行,如果我用子查询这么写:
select *
from table1
where C = (select C
           from table2
           where C>100
           )
这个时候会报错,说子查询返回的值不止一个。
但是我们不可以这样去实现吗:将C中的每一个值和子查询结果集中的每一个值作比较,如果相等则返回改行,这么实现也没什么问题啊,但为什么会报错呢?为什么必须用in和exist呢?我觉得前者更直观一些
------解决方案--------------------------------------------------------
原理是像你所说的一样,但这是语法规定啊,不这样做编译器就认为有错。
当然,如果你自己写一个编译器的话,就可以执行你的语句了。
  相关解决方案