select t.*, t.rowid from dept t1 10 ACCOUNTING NEW YORK AAAGDvAABAAAH1UAAA
2 20 RESEARCH DALLAS AAAGDvAABAAAH1UAAB
3 30 SALES CHICAGO AAAGDvAABAAAH1UAAC
4 40 OPERATIONS BOSTON AAAGDvAABAAAH1UAAD

select t.*, t.rowid from dept t,dept c1 10 ACCOUNTING NEW YORK AAAGDvAABAAAH1UAAA
2 20 RESEARCH DALLAS AAAGDvAABAAAH1UAAB
3 30 SALES CHICAGO AAAGDvAABAAAH1UAAC
4 40 OPERATIONS BOSTON AAAGDvAABAAAH1UAAD
5 10 ACCOUNTING NEW YORK AAAGDvAABAAAH1UAAA
6 20 RESEARCH DALLAS AAAGDvAABAAAH1UAAB
7 30 SALES CHICAGO AAAGDvAABAAAH1UAAC
8 40 OPERATIONS BOSTON AAAGDvAABAAAH1UAAD
9 10 ACCOUNTING NEW YORK AAAGDvAABAAAH1UAAA
10 20 RESEARCH DALLAS AAAGDvAABAAAH1UAAB
11 30 SALES CHICAGO AAAGDvAABAAAH1UAAC
12 40 OPERATIONS BOSTON AAAGDvAABAAAH1UAAD
13 10 ACCOUNTING NEW YORK AAAGDvAABAAAH1UAAA
14 20 RESEARCH DALLAS AAAGDvAABAAAH1UAAB
15 30 SALES CHICAGO AAAGDvAABAAAH1UAAC
16 40 OPERATIONS BOSTON AAAGDvAABAAAH1UAAD
为什么第一个只有4条记录,第二个会成为4*4=16呢?
具体是怎么执行的?

解决方案 »

  1.   

    select t.*, t.rowid from dept t,dept c 
    没有连接条件,取的是笛卡尔积,所以是4*4=16
      

  2.   

    因为你第二句里面FROM后面加了两个表呀
    而且你又没使用连接条件
    ORACLE就默认使用笛卡尔积了(知道是什么吧?)
    也就是拿出第一个表中的每一条记录去和第二个表中的每一条记录拼接成一条新记录
    也就是4*4=16了其实你注意看第二个查询中的ROWID 每相隔三个是相同的
    因为其实就是同一个表中的记录