(一)内连接 
  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种: 
  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。 
  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。 
  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。 
  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:   SELECT * 
  FROM authors AS a INNER JOIN publishers AS p 
  ON a.city=p.city 
  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): 
  SELECT a.*,p.pub_id,p.pub_name,p.country 
  FROM authors AS a INNER JOIN publishers AS p 
  ON a.city=p.city   (二)外连接 
  内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:   SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b 
  ON a.username=b.username   下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:   SELECT a.*,b.* 
  FROM city as a FULL OUTER JOIN user as b 
  ON a.username=b.username   (三)交叉连接 
  交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。   SELECT type,pub_name 
  FROM titles CROSS JOIN publishers 
  ORDER BY type 
  [Post=0][/Post] 

解决方案 »

  1.   

    --测试代码
    declare @tb1 table(id int identity(1,1),name char(10))
    declare @tb2 table(userid int,score int)
    insert @tb1
    select 'aaaa' union all
    select 'bbbb' union all
    select 'cccc' union all
    select 'dddd'
    insert @tb2 
    select 1,20 union all
    select 2,30 union all
    select 3,40
    select id,name,score from @tb1 as a inner join @tb2 as b on a.id = b.userid/*
    测试结果id          name       score       
    ----------- ---------- ----------- 
    1           aaaa       20
    2           bbbb       30
    3           cccc       40
    */
    inner join  的意思就是只有当表@tb1中的Id列的值等于表@tb2的Userid相等是,,才将结果取出
      

  2.   

    inner join  当连接的表个数大于三个时,建议使用该连接模式,性能较where = 要好。
    两者区别在于  where = 是 笛卡儿乘积 和 选择  运算的 顺序不同。