inner、left/right、full outer、natural、union

表A和B的数据如下面所示:

点击(此处)折叠或打开

  1. SQL> select * from a;

  2.     CUSTNO CUSTNAME CITY
  3. ---------- -------------------- --------------------
  4.          1 KING    SEATTLE
  5.          2 GREEN   BOSTON
  6.          3 KOCHAR  SEATTLE
  7.          4 SMITH   NEW YORK

  8. SQL>
  9. SQL> select * from b;

  10.   B_CUSTNO B_CUSTNAME B_CITY
  11. ---------- -------------------- --------------------
  12.          1 GREEN      TOKYO
  13.          2 KING       BOSTON
  14.          3 COMMIT     NEW YORK
inner join : 就是表A和B的交集

点击(此处)折叠或打开

  1. SQL> select * from a inner join b on a.city = b.b_city;

  2.     CUSTNO CUSTNAME CITY    B_CUSTNO B_CUSTNAME B_CITY
  3. ---------- -------------------- -------------------- ---------
  4.          2 GREEN    BOSTON     2      KING     BOSTON
  5.          4 SMITH    NEW YORK   3      COMMIT   NEW YORK
left join :左边表全部显示,右边表只显示匹配上的,没有匹配上的显示为null
right join :右边表全部显示,左边表只显示匹配上的,没有匹配上的显示为null

点击(此处)折叠或打开

  1. SQL> select * from a left join b on a.city = b.b_city order by 1 ;

  2.     CUSTNO CUSTNAME CITY    B_CUSTNO B_CUSTNAME B_CITY
  3. ---------- -------------------- -------------------- ---------- -------------------- --------------------
  4.          1 KING    SEATTLE
  5.          2 GREEN   BOSTON   2        KING        BOSTON
  6.          3 KOCHAR  SEATTLE
  7.          4 SMITH   NEW YORK 3        COMMIT      NEW YORK

  8. SQL> select * from a right join b on a.city = b.b_city order by 4 ;

  9.     CUSTNO CUSTNAME CITY B_CUSTNO B_CUSTNAME B_CITY
  10. ---------- -------------------- -------------------- ---------- -------------------- --------------------
  11.                               1   GREEN    TOKYO
  12.          2 GREEN    BOSTON    2   KING     BOSTON
  13.          4 SMITH    NEW YORK  3   COMMIT   NEW YORK

full outer join: 两个表的并集

点击(此处)折叠或打开

  1. SQL> select * from a full outer join b on a.city = b.b_city ;

  2.     CUSTNO CUSTNAME CITY B_CUSTNO B_CUSTNAME B_CITY
  3. ---------- -------------------- -------------------- ---------- -------------------- --------------------
  4.          1 KING     SEATTLE
  5.          2 GREEN    BOSTON    2    KING     BOSTON
  6.          3 KOCHAR   SEATTLE
  7.          4 SMITH    NEW YORK  3    COMMIT   NEW YORK
  8.                               1    GREEN    TOKYO


natural join :自然连接,连接2个表中字段名相同及字段类型兼容(隐式转换)的列,默认允许再增加条件

点击(此处)折叠或打开

  1. SQL> select * from a;

  2.     CUSTNO CUSTNAME CITY
  3. ---------- -------------------- --------------------
  4.          1 KING     SEATTLE
  5.          2 GREEN    BOSTON
  6.          3 KOCHAR   SEATTLE
  7.          4 SMITH    NEW YORK

  8. SQL> select * from c;

  9.     CUSTNO CUSTNAME
  10. ---------- --------------------
  11.          1 KING
  12.          2 SMITH
  13.          3 TEST

  14. SQL> select * from a natural join c ;

  15.     CUSTNO CUSTNAME CITY
  16. ---------- -------------------- --------------------
  17.          1 KING SEATTLE

  用join using() 可以得到与natural join一样的结果:
  1. SQL> select * from a join c using (custno,custname);

  2.     CUSTNO CUSTNAME CITY
  3. ---------- -------------------- --------------------
  4.          1 KING SEATTLE
union ,union all :合并2个结果集,2个结果集的查询列数目必须相同,并且,列的数据类型相同或兼容。
当显示单个列时,union会对结果集去重,union all则不去重

点击(此处)折叠或打开

  1. SQL> select custname from a union select b_custname from b;

  2. CUSTNAME
  3. --------------------
  4. COMMIT
  5. GREEN
  6. KING
  7. KOCHAR
  8. SMITH

  9. SQL> select custname from a union all select b_custname from b;

  10. CUSTNAME
  11. --------------------
  12. KING
  13. GREEN
  14. KOCHAR
  15. SMITH
  16. GREEN
  17. KING
  18. COMMIT

  19. 7 rows selected.

单列结果集时,union会对结果去重,union all 则不去重

  1. SQL> select custno,custname from a union select b_custno,b_custname from b;

  2.     CUSTNO CUSTNAME
  3. ---------- --------------------
  4.          1 GREEN
  5.          1 KING
  6.          2 GREEN
  7.          2 KING
  8.          3 COMMIT
  9.          3 KOCHAR
  10.          4 SMITH

  11. 7 rows selected.

  12. SQL> select custno,custname from a union all select b_custno,b_custname from b;

  13.     CUSTNO CUSTNAME
  14. ---------- --------------------
  15.          1 KING
  16.          2 GREEN
  17.          3 KOCHAR
  18.          4 SMITH
  19.          1 GREEN
  20.          2 KING
  21.          3 COMMIT

  22. 7 rows selected.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28551528/viewspace-2123870/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28551528/viewspace-2123870/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值