这些图片都是我搜索到别人讲解来求助的。只是自己还是有一些不懂。所以虚心求助大家。可能太基础。但是还是一定要问
如图1,这是二张表。一个为投票主表,一个为投票者信息表~记录投票人IP及对应投票类型,他的例子用了如图2的语句。那么请问。1、vm.id是什么意思? vm.votetitle又是什么意思.VT.ip又是什么意思?为什么每一个字段都要加什么vm vt呢?不明白。请解答。2、以及后面 as vm right jion  这一句又是什么意思?3、vt on vm.id=vt.ip  这一句又是什么意思?
又如图3
为什么把right找成left后得到的结果又不一样呢?

如下地址是我搜索到的说明。真的虚心想请大家耐心说明一下。你们可以说这些问题比较菜。也可以笑。但是不懂我就真的要问http://www.javaeye.com/topic/465807   (这是我搜索到的说明)

解决方案 »

  1.   

    1.都是指定列名啊
    2.as vm right jion  --指定别名为vm  右连接
    3.vt on vm.id=vt.ip  ---连接条件  用于连接两个表
    4.--看这个
    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 数据类型数据的字段,将会发生错误.
      

  2.   

    楼上的回答真精细。佩服建议楼主从头看一些SQL的基础知识
      

  3.   


    谢谢小F呀爱死你了。你的这个例子与我找到的那个说明让我更明白了。这个资料真的要慢慢看。一定要理解它。3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q
    那么还问一下小F。是不是用了连接的时候都要指定别名?也就是用了连接的话就一定要加一个另外的名称。不能只用原来的?还有除了连接的时候要指定别名以外。其它常用查询哪一些情况也要指定别名?谢谢
    还有基础的书。老大的那个《深入浅出SQL SERVER2000》我去书店看了。感觉好多知识看不懂。这本书对我来说还是有点深了。到底入门的书哪一本比较好?
      

  4.   

    还有除了连接的时候要指定别名以外。其它常用查询哪一些情况也要指定别名?谢谢嵌套查询需要
    比如
    select
      *
    from
       a,
      (select id,count(1) as num from b group by id)b
    where
      a.id=b.id
      

  5.   

    帮助文档非常适合你谢谢!要先看一些数据库SQL相关的基础知识,比如SQL查询基本的语法。
      

  6.   

    先谢谢各位了。今天小F这个讲解。真的让我明白很多了。以前在论坛经常看见左连接与右连接可就是一直在糊涂中。。今天这个说明至少让我这个菜鸟总算不那么糊涂了。。小F这头像我在另外论坛一直在用。偶像呀。MB
      

  7.   


    谢谢。也知道了。比如像这种嵌套的查询我还是不会写。先慢慢学。。期待有一天能够达到你的水平。。呵呵。加油。。CSDN(床上等你)论坛的人真是热心。牛人也多。感谢所有朋友。。