sql中逗号是不是相当于笛卡尔积,另外逗号和join的关系,他们两个是不是一个概念。求高手!!
例如: select * from a,b where a.id=b.id;这里的逗号是不是就相当于笛卡尔积?
select * from a join b on a.id= b.id;这里的join是不是和上面的逗号一样的意思?

解决方案 »

  1.   

    join 分左连接,右连接 ,全连接,不一样的!
      

  2.   

    当Join是全连接的时候和逗号一样,当为left join、right join的时候不是做笛卡尔积操作。
      

  3.   

    逗号 =  inner join和 全连接 full join 不一样
      

  4.   

    先准备一下环境:
    hr@ORCL> select * from p;        ID TEST
    ---------- -----
             1 e
             2 f
             3 ghr@ORCL> select * from t;        ID NAME
    ---------- -----
             1 a
             2 b
             3 c
             4 c
             5 b来回答你的第一个问题
    hr@ORCL> select p.id,t.id,test,name from p,t where p.id=t.id;        ID         ID TEST  NAME
    ---------- ---------- ----- -----
             1          1 e     a
             2          2 f     b
             3          3 g     c所以,这里的逗号不是笛卡尔积。如果是笛卡尔积应该是3*5=15才对哦。要出现15行才对哈。你只要把where子句去掉,这里的逗号就是在作笛卡尔积哈。
    接下来回答你的第二个问题。
    hr@ORCL> select p.id,t.id,test,name from p join t on p.id=t.id;        ID         ID TEST  NAME
    ---------- ---------- ----- -----
             1          1 e     a
             2          2 f     b
             3          3 g     c可见,这里的join和上面的逗号是一样的意思。
      

  5.   

    逗号与inner等同,即只查询两表条件均满足的数据。
    left join,左表数据多于右表
    right join,与left join相反
    full join,即是left join和right join的并集