在项目开发时,会经常写大量的SQL语句,可是为什么每次写SQL语句都有疑惑的感觉呢?后来我想了想,还是自己对SQL语句是如何被执行的没有弄清楚。比如写一个查询语句,语句里面有ORDER BY ,GROUP BY 等等。它具体是如何执行的,最终取出结果集的呢?总之,对于写SQL语句我仿佛找不到一个很好思路。对于我这样的问题,望各位大虾帮忙。

解决方案 »

  1.   

    看执行计划,可以知道oracle到底是按照什么顺序执行sql的
      

  2.   

    SQL语言是第四代语言,和我们常用的编程语言(第三代语言)不同的是:第四代语言描述的是你要的执行结果,而不是执行过程(这是第三代语言所做的事)。因此SQL的风格与常用的编程语言是不一样的,从这个思路去思考就可以理解SQL了,而没有必要去关心具体是怎么执行的(当然,这常常也是要考虑的)。就如同你坐出租车和你自驾车的区别,坐出租车的你只要告诉司机你要去的地方(第四代语言),而自驾车的你要关心的是走哪条路(第三代语言)。当然,你坐出租车也会关心走哪条路,但这是为了更省钱或省时间,这时你可以问一下司机打算如何走(看执行计划)。但你也可以不关心走哪条路,只说目的地。因此你说的你对SQL的疑惑,我觉得不是去了解SQL语句是如何被执行能够解决的,而是思维方式的问题,要了解SQL的语义。想想吧,你要的结果是什么,别管过程,这样你就能理解SQL了。至于SQL如何被执行,是DBMS管的事,可以说同样的SQL语句在不同的数据库里,甚至在不同的执行过程中其执行计划都可能不一样。当然你可以通过看执行计划来了解执行过程,但这样做的目的应该是为了提高性能,而不是用来理解SQL。
      

  3.   

    set autotrace on
    当你执行SQL后就有一串执行步骤,然后参考执行步骤,提出好的解决方案
      

  4.   

    谢谢xb_feng()