声明: 我是个学员 很菜很菜的菜鸟...上课老师 讲了 [多表联查]  inner join 、 left (outer) join 、 right (outer) join让我们 full & cross 感兴趣的去了解下..我很想知道详细的解释...比如:例举几个实例让我看下 可以么?(可以用SQL语句,最好是T-SQL语句)小弟在此谢过...

解决方案 »

  1.   

    --查找学生数据库中每个学生的情况和选修的课程情况
    use xscj
    select * 
        from xs inner join xs_kc 
    on xs.学号=xs_kc.学号  
    go
    --从数据库xscj中查询学生的姓名、课程名和成绩
    use xscj
    select  姓名,课程名,成绩
        from xs join xs_kc 
        on xs.学号=xs_kc.学号
        join kc
        on kc.课程号=xs_kc.课程号
    go
    --内连接— …inner join… on…
    --查找选修了‘计算机基础’课程且成绩在80分以上的学生的学号、姓名、课程名及成绩
    use xscj
    select 学号,姓名,课程名,成绩
    from xs join xs_kc 
      on xs.学号=xs_kc.学号
      join kc
      on kc.课程号=xs_kc.课程号 
      where  课程名=‘计算机’ and 成绩>=80
    go--查找不同课程但成绩相同的学生的学号、课程号和成绩
    use xscj
    select a.学号,a.课程号,b.课程号,b.成绩
    from xs_kc a join xs_kc b 
       on a.成绩=b.成绩   and a.学号=b.学号 
       and a.课程号!=b.课程号                    
    go  
      

  2.   

    请问这位大哥full join & cross join 用于了哪段中哦?还有 记得数据库里 怎么老师说 不等于 不是 '!=' 而是 '<>'这样的额?为什么呢?
      

  3.   


    --Test Data
    CREATE TABLE #First
    (
    userID smallint,
    userName nvarchar(50),
    userAddress nvarchar(200)
    )
    INSERT INTO #First
    SELECT 1, 'Kim', 'China' UNION ALL
    SELECT 2, 'Tom', 'America' UNION ALL
    SELECT 3, 'Lily', 'Japan'CREATE TABLE #Second
    (
    userID smallint,
    userName nvarchar(50),
    userAddress nvarchar(200)
    )
    INSERT INTO #Second
    SELECT 2, 'Kim', 'China' UNION ALL
    SELECT 5, 'Tom', 'America' UNION ALL
    SELECT 6, 'Lily', 'Japan'--FULL JOIN
    /*
    FULL JOIN就是把两个表完全连起来,不管对应的连接值是否存在
    */
    SELECT * FROM #First a
    FULL JOIN #Second b
    ON a.userID = b.userID--CROSS JOIN
    /*
    CROSS JOIN按笛卡尔积连接,也就是两表组合的任何形式
    */
    SELECT * FROM #First a
    CROSS JOIN #Second bDROP TABLE #First
    DROP TABLE #Second
      

  4.   

    Full Join 相当于只把两个表的字段相加到了一起,而行数等于行数较多的表,不会增加行数(我的理解)
    Cross Join 是笛卡尔积,比如一个表有2行,而另外的表有3行,那么Cross Join后就是6行 
    使用Cross Join的时候不需要设置ON条件,而Full Join的时候需要
      

  5.   

    另:
    不等于使用"<>"符,是T-SQL的规定,没办法...
      

  6.   

    != 与 <> 在实际中没有任何区别呀?
      

  7.   

    这些东西往上应该有很多的说明。full就是根据等值关系将两个表连起来,两个表的所有行都会显示出来。
    而cross就是不依赖等值关系而将2个表连起来,有很多数据是没有实际意义的。