我有的
  在手上呢?
请问你说的关于理解正好相反,是不是说关于那个  “右外连接返回的是所有左边的列值+右边的空值或者匹配值”
  帮助文档里有“通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行”以及“在 WHERE 子句中使用 *= 和 =* 运算符指定外联接的旧式语法。”
  按课本上的讲解,他所说的*在右,称右外连接,返回的左边表中的所有列,是与帮助文档里的解释有冲突,
  楼主读书真是很认真,佩服+向你学习!

解决方案 »

  1.   

    左连接右连接
    --在分析器中运行看看他们的区别
    declare @tbl1 table(id1 char(10) ,name1 char(10))
    insert @tbl1 select 
    '1','a' union select 
    '2','b' union select
    '33','d' union select 
    '44','e'
    select '弟一','個表' union all
    select * from @tbl1
    declare @tbl2 table(id2 char(10),name2 char(10))
    insert @tbl2 select
    '1','a' union select 
    '2','b' union select
    '55','d' union select 
    '66','e'
    select '弟二','個表' union all
    select * from @tbl2
    select '内連接','記録数=','表1表2','関連の記録' union all
    select * from @tbl1 as a inner join @tbl2 as b  on a.id1 = b.id2--内連接
    select '左連接','','関連記録外','表1記録全有' union all
    select * from @tbl1 as a left join @tbl2 as b  on a.id1 = b.id2--左連接
    select  '右連接','','関連記録外','表2記録全有' union all
    select * from @tbl1 as a right join @tbl2 as b   on a.id1 = b.id2--右連接
    select '全連接','',' 表1和表2','所有記録' union all
    select * from @tbl1 as a full join @tbl2  as b   on a.id1 = b.id2 --全連接
    select '交差連接','記録数=','表1記録数×','表2記録数' union all
    select * from @tbl1 as a cross join @tbl2  as b       --交差連接
      

  2.   

    呵呵,我说的大概就是limaowa() 说的那个意思,有谁知道是怎么回事吗?
      

  3.   

    其实左右连接只要确定以左面为主表就可以了。可能是中国语言的侧重点不同。书上说的可能不是join操作符的左右,而是左右表的左右。虽然表达的不太好,但是感觉书上面说的没有什么错误。
      

  4.   

    这两天看老萨的书,感觉真是太旧了.这个外连接也不知道是哪年的了,以前看过一本老外的<数据库系统概念>,是按92标准讲的,比较好,跟老萨这个刚好相反,sql server 2000也是按照的92标准.老萨这第三版好歹也是2000年才出,怎么尽拿这些个过时的东东来忽悠我们.