内连接(inner join,=)、左外连接(left join……on)、右外连接(right join……on)

举个例子:  
  假设a表和b表的数据是这样的。  
  a                         b    
  id     name  id     stock   
  1  a             1         15  
  2         b             2         50  
  3         c                  
   
  select   *   from   a   inner   join   b   on   a.id=b.id  
  这个语法是连接查询中的内连接,它产生的结果是  
  两个表相匹配的记录出现在结果列表中。  
  根据上面的表,出现的结果是这样的  
  a.id     name     b.id     stock  
  1       a             1         15  
  2             b             2         50  
  ----------------------------  
  select   *   from   a,b   where   a.id=b.id  
  这个语法是内连接的另外一种写法,其执行结果与inner   join   一样  
   
  --------------------------------    
   
  select   *   from   a   left/right   join   b   on   a.id=b.id  
  这个是外连接语法中的左外连接或右外连接  
  如果是左外连接的话,它将显示a表的所有记录,  
  select   a.*,b.*   from   a   left   join   b   on   a.id=b.id  
  查询的结果是这样的:  
  a.id     name     b.id     stock  
  1         a         1             15  
  2               b         2             50  
  3               c       null         null   
  --------------------------------------------  
  如果是右外连接的话,它将显示b表的所有记录,  
  select   a.*,b.*   from   a   right   join   b   on   a.id=b.id  
  查询的结果是这样的:  
  a.id     name     b.id     stock  
  1         a         1             15  
  2               b         2             50  

 

 

4 完全连接:

 

select * from test1,test2 where test1.a=test2.a(+)【左连接】
union
select * from test1,test2 where test1.a(+)=test2.a; 【右连接】

 

和以下写法等价:

select * from test1 full join test2 on test1.a=test2.a

 

5 笛卡尔积

select * from test1,test2;

 

【详细内容参见下文】

insert   into   dali.test1   values(1,456);
insert   into   dali.test1   values(2,427);
insert   into   dali.test2   values(1,45456);
insert   into   dali.test2   values(3,45656);
  
---内连接
select   *   from   dali.test1   a,   dali.test2   b   where   a.a=b.a;
  
---左连接
select   *   from   dali.test1   a,   dali.test2   b   where   a.a=b.a(+);
  
---右连接
select   *   from   dali.test1   a,   dali.test2   b   where   a.a(+)=b.a;
  
---完全连接
select   *   from   dali.test1   a,   dali.test2   b   where   a.a=b.a(+)
union
select   *   from   dali.test1   a,   dali.test2   b   where   a.a(+)=b.a;
  
---迪卡尔
select   *   from   dali.test1,   dali.test2;
'==================================================================
9i和sqlserver一样   left   join,right   join,full   join

 


内连接结果:
    A   B    A B
1 1 456 1 45456
'----------------------------
左连接结果:
    A    B    A    B
1 1    456 1 45456
2 2    427
'====================
右连接结果:
    A    B    A    B
1 1   456   1    45456
2               3    45656
'=============================
完全连接结果:
    A    B      A    B
1   1   456     1   45456
2   2   427
3               3   45656
'========================
笛卡尔结果:
    A    B    A    B
1 1   456   1   45456
2 2   427   1   45456
3 1   456   3   45656
4 2   427   3   45656

你可能感兴趣的:(内连接(inner join,=)、左外连接(left join……on)、右外连接(right join……on))