这些图片都是我搜索到别人讲解来求助的。只是自己还是有一些不懂。所以虚心求助大家。可能太基础。但是还是一定要问
如图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 (这是我搜索到的说明)
解决方案 »
- 请问各位牛人,关于权限问题的数据库设计问题。复杂内详,非牛人勿进。
- 两表组合查询,显示借贷关系
- 请问如何如何加锁以便连续对一个表进行操作?
- 请教 如何导出或者删除 服务器上的ssis实例
- 通过一个存储过程,如何把另一个存储过程名字改掉并而改其内容并而且加上“WITH ENCRYPTION”
- 怎样在Instead Of 触发器中使用事务?
- 关于FOXPRO中表格的问题
- TO弱水三千,哥们终于成功的给了你分了,千万别这么大气了 :)
- 请问在MS SQL Server2000中,Select是什么意思?
- sql 查询
- 各位大侠,请问怎样在存储过程里,批量更新数据啊?
- 如何通过得到的品牌ID寻找供应商
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 数据类型数据的字段,将会发生错误.
谢谢小F呀爱死你了。你的这个例子与我找到的那个说明让我更明白了。这个资料真的要慢慢看。一定要理解它。3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q3Q
那么还问一下小F。是不是用了连接的时候都要指定别名?也就是用了连接的话就一定要加一个另外的名称。不能只用原来的?还有除了连接的时候要指定别名以外。其它常用查询哪一些情况也要指定别名?谢谢
还有基础的书。老大的那个《深入浅出SQL SERVER2000》我去书店看了。感觉好多知识看不懂。这本书对我来说还是有点深了。到底入门的书哪一本比较好?
比如
select
*
from
a,
(select id,count(1) as num from b group by id)b
where
a.id=b.id
谢谢。也知道了。比如像这种嵌套的查询我还是不会写。先慢慢学。。期待有一天能够达到你的水平。。呵呵。加油。。CSDN(床上等你)论坛的人真是热心。牛人也多。感谢所有朋友。。