以下SQL语句有和区别(50分)

  • 主题发起人 主题发起人 cb1997
  • 开始时间 开始时间
C

cb1997

Unregistered / Unconfirmed
GUEST, unregistred user!
Select grn_doc_number
From purchasing
Where po_doc_number In (
Select ref_doc_number
From Queue
Where trn_type=1)


select purchasing.grn_doc_number
From queue,purchasing
Where Queue.trn_type=1 And purchasing.po_doc_number In queue.ref_doc_number

有什么区别
 
有呀.第二句执行肯定要报错的.
改为:
select purchasing.grn_doc_number
From queue,purchasing
Where Queue.trn_type=1 And purchasing.po_doc_number = queue.ref_doc_number
 
第二个SQL应该是:select purchasing.grn_doc_number From queue,purchasing Where Queue.trn_type=1 And purchasing.po_doc_number=queue.ref_doc_number吧?
如果是的话从查询结果来说没有什么区别,但是从关系代数的角度来说还是有区别的。第一个SQL语句是在对关系REF_DOC_NUMBER进行选择的基础上再对关系PURCHASING进行投影;而第二个SQL语句则是在关系REF_DOC_NUMBER和关系PURCHASING进行等值连接的基础上进行投影运算的。从关系代数的逻辑来分析应该是第二条语句的执行效率更高一些(因为第一条语句要进行两次选择运算),而且从两条语句的实际执行效率来看也可以充分证明这一点。
 
前一条语句的速度肯定要慢一些,你可以在查询分析器里面试试
 
现在是2条语句都可以查,但是查的结果却不同,我想问这是什么原因?

至于 用in和=那里是一样的,没有影响的!
 
后面的SQL改成:
select purchasing.grn_doc_number From queue,purchasing Where (Queue.trn_type=1) And (purchasing.po_doc_number=queue.ref_doc_number)
查询结果应该就一样了,你试试看...
 
后退
顶部