根据数据库理论, 第一张表如果有m条记录, 第二张表有n条记录, 那么笛卡儿积之后, 应该有m*n条记录。 现在有一张表A(id ,name), 有三条记录id name
1 A
2 B
3 C表B(id)没有记录。执行 如下语句:select * from A,B返回0条记录, 符合数据库理论, 5*0=0执行 如下 语句:select A.id from A left outer join B 
on A.id=B.id成功返回A_id
1
2
3这里我感到很疑惑, 数据库在表连接的时候, 总是先做笛卡儿积形成虚拟表VT1,然后在VT1的上再作筛选, 现在VT1很明显是空集, 为什么left outer join 能出结果?谢谢啦~

解决方案 »

  1.   

    OUT JOIN有分执行3个阶段
    1:笛卡尔积:
    2:ON筛选器
    3:添加外部行
    第3步会把2步过滤掉的A表的行重新添加回来。
    所以楼主的机构就是A表的数据了
      

  2.   

    内部链接inner,执行前两个阶段笛卡尔积和ON筛选器
      

  3.   

    A left outer join B
    不管B有没有记录,A的记录总是会有的,如果查询含B的列,则为NULL.
      

  4.   

    left outer join以第一表为基础表,和第二表进行连接,如果内连接,则无记录.如果是左连接,则以第一表为准.
      

  5.   

    select * from A,B

    select * from A inner join B
    有什么区别?