有如下兩條SQL,請問一下,有什麼區別:
1)SELECT inv_cycle_detail.cycle_nbr,   
         inv_cycle_master.cycle_nbr  
    FROM inv_cycle_detail,   
         inv_cycle_master  
   WHERE ( inv_cycle_master.cycle_nbr = inv_cycle_detail.cycle_nbr )  2)SELECT a.cycle_nbr,   
         b.cycle_nbr  
    FROM inv_cycle_detail a left join    inv_cycle_master  b
   on a.cycle_nbr = b.cycle_nbr

解决方案 »

  1.   

    1)SELECT --内连接,inv_cycle_detail表里和inv_cycle_master表里相等的数据才出来
    inv_cycle_detail.cycle_nbr,  
            inv_cycle_master.cycle_nbr  
        FROM inv_cycle_detail, inv_cycle_master  
      WHERE ( inv_cycle_master.cycle_nbr = inv_cycle_detail.cycle_nbr )  2)SELECT --左连接,inv_cycle_detail表里数据都出来,inv_cycle_master表里只出来和inv_cycle_detail相等的数据,其它用空白来补充
    a.cycle_nbr,  
            b.cycle_nbr  
        FROM inv_cycle_detail a 
    left join    inv_cycle_master  b on a.cycle_nbr = b.cycle_nbr 
      

  2.   

    1相当于inner join,2是左连接
      

  3.   

    1也可以写成这样
    SELECT
    inv_cycle_detail.cycle_nbr,  
            inv_cycle_master.cycle_nbr  
        FROM inv_cycle_detail 
    INNER JOIN inv_cycle_master   ON inv_cycle_master.cycle_nbr = inv_cycle_detail.cycle_nbr
      

  4.   

    sql之left join、right join、inner join的区别
    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行举例如下: 
    --------------------------------------------
    表A记录如下:
    aID     aNum
    1     a20050111
    2     a20050112
    3     a20050113
    4     a20050114
    5     a20050115表B记录如下:
    bID     bName
    1     2006032401
    2     2006032402
    3     2006032403
    4     2006032404
    8     2006032408--------------------------------------------
    1.left join
    sql语句如下: 
    select * from A
    left join B 
    on A.aID = B.bID结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404
    5     a20050115    NULL     NULL(所影响的行数为 5 行)
    结果说明:
    left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
    换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
    B表记录不足的地方均为NULL.
    --------------------------------------------
    2.right join
    sql语句如下: 
    select * from A
    right join B 
    on A.aID = B.bID结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404
    NULL     NULL     8     2006032408(所影响的行数为 5 行)
    结果说明:
    仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
    --------------------------------------------
    3.inner join
    sql语句如下: 
    select * from A
    innerjoin B 
    on A.aID = B.bID结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404结果说明:
    很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
    --------------------------------------------
    注: 
    LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2说明:table1, table2参数用于指定要将记录组合的表的名称。
    field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
    compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
    如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.
     
      

  5.   

    DECLARE @TA TABLE(ID INT,  name VARCHAR(2))
    INSERT @TA
    SELECT 1,  'aa' UNION ALL 
    SELECT 2,  'bb'DECLARE @TB TABLE(ID INT, name VARCHAR(2))
    INSERT @TB
    SELECT 2, 'cc' UNION ALL 
    SELECT 3, 'dd'--1, 内连接INNER JOIN 或 JOIN
    SELECT * FROM @TA AS A INNER JOIN @TB AS B ON A.ID=B.ID
    /*
    ID          name ID          name 
    ----------- ---- ----------- ---- 
    2           bb   2           cc
    */--3, 左连接LEFT JOIN
    SELECT * FROM @TA AS A LEFT JOIN @TB AS B ON A.ID=B.ID
    /*
    ID          name ID          name 
    ----------- ---- ----------- ---- 
    1           aa   NULL        NULL
    2           bb   2           cc
    */--3, 右连接RIGHT JOIN
    SELECT * FROM @TA AS A RIGHT JOIN @TB AS B ON A.ID=B.ID
    /*
    ID          name ID          name 
    ----------- ---- ----------- ---- 
    2           bb   2           cc
    NULL        NULL 3           dd
    */--4, 完全外连接 FULL JOIN 
    SELECT * FROM @TA AS A FULL JOIN @TB AS B ON A.ID=B.ID
    /*
    ID          name ID          name 
    ----------- ---- ----------- ---- 
    2           bb   2           cc
    NULL        NULL 3           dd
    1           aa   NULL        NULL
    */
      

  6.   

    第一条:从两个表中返回相匹配的所有记录
    第二条:返回整个左表的记录+从两个表中返回相匹配的所有记录(左表即代码里先出现的表)
    比如:"select * from table_1 left join talbe_2 on search condition"中table_1就是左表
          "select * from table_2 left join talbe_1 on search condition"中table_2就是左表
      

  7.   

    1, inner join
    2, left join
      

  8.   


    1.第一个相当于innser join,内连接两个配置的记录..
    2.第二个先找出两个配置的记录,再找出左边没有显示的所有记录.
      

  9.   

    这个其实很简单。
    1)SELECT inv_cycle_detail.cycle_nbr, 
            inv_cycle_master.cycle_nbr 
        FROM inv_cycle_detail, 
            inv_cycle_master 
      WHERE ( inv_cycle_master.cycle_nbr = inv_cycle_detail.cycle_nbr )  此为内连接,相当于INNER JOIN 2)SELECT a.cycle_nbr, 
            b.cycle_nbr 
        FROM inv_cycle_detail a left join    inv_cycle_master  b 
      on a.cycle_nbr = b.cycle_nbr1)( inv_cycle_master.cycle_nbr = inv_cycle_detail.cycle_nbr ) 
    条件改成
       ( inv_cycle_master.cycle_nbr *= inv_cycle_detail.cycle_nbr ) 
    就是和2一样,即表1全部显示,表面2显示符合条件的。