mysql left join,right&…

转自: http://www.jb51.net/article/15386.htm
下面是例子分析
表A记录如下:
aID                aNum
                    a20050111
                    a20050112
                    a20050113
                    a20050114
                    a20050115

表B记录如下:
bID                bName
                      2006032401
                    2006032402
                    2006032403
                    2006032404
                    2006032408

创建这两个表SQL语句如下:
CREATE  TABLE    a (
aID  int(  AUTO_INCREMENT  PRIMARY  KEY  ,
aNum  char(  20  )
)
CREATE  TABLE  b(
bID  int(  NOT  NULL  AUTO_INCREMENT  PRIMARY  KEY  ,
bName  char(  20 
)

INSERT  INTO  a
VALUES  1,  'a20050111'  2,  'a20050112'  3,  'a20050113'  4,  'a20050114'  5,  'a20050115'  ;

INSERT  INTO  b
VALUES  1,  2006032401'  2,  '2006032402'  3,  '2006032403'  4,  '2006032404'  8,  '2006032408'  ;

实验如下:
1.left  join(左联接)

sql语句如下: 
SELECT  FROM  a
LEFT  JOIN   
ON  a.aID  =b.bID

结果如下:
aID                aNum                                      bID                      bName
                      a20050111                                              2006032401
                      a20050112                                            2006032402
                      a20050113                                            2006032403
                      a20050114                                            2006032404
                      a20050115                  NULL              NULL
(所影响的行数为  行)

结果说明:
                left  join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left  join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:  A.aID  B.bID).
B表记录不足的地方均为NULL.

2.right  join(右联接)

sql语句如下: 
SELECT    FROM  a
RIGHT  JOING 
ON  a.aID  b.bID

结果如下:
aID                aNum                                      bID                      bName
                      a20050111                                              2006032401
                      a20050112                                            2006032402
                      a20050113                                            2006032403
                      a20050114                                            2006032404
NULL        NULL                                                                2006032408
(所影响的行数为  行)

结果说明:
                仔细观察一下,就会发现,和left  join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner  join(相等联接或内联接)

sql语句如下: 
SELECT  FROM    a
INNER  JOIN    b
ON  a.aID  =b.bID

等同于以下SQL句:
SELECT 
FROM  a,b
WHERE  a.aID  b.bID

结果如下:
aID                aNum                                      bID                      bName
                      a20050111                                              2006032401
                      a20050112                                            2006032402
                      a20050113                                            2006032403
                      a20050114                                            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  数据类型数据的字段,将会发生错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值