商务合作:179001057@qq.com

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

技术2022-05-11  0


某平台价值19860元的编程课程资料免费领取【点我领取】


举个例子:     假设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(+)【左连接】unionselect * 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 B1 1 456 1 45456'----------------------------左连接结果:    A    B    A    B1 1    456 1 454562 2    427'====================右连接结果:    A    B    A    B1 1   456   1    454562               3    45656'=============================完全连接结果:    A    B      A    B1   1   456     1   454562   2   4273               3   45656'========================笛卡尔结果:    A    B    A    B1 1   456   1   454562 2   427   1   454563 1   456   3   456564 2   427   3   45656


最新回复(0)