轻松搞定左外连接、右外连接、内连接、全连接、交叉连接

SELECT * FROM(
        SELECT '1' A,'a' B FROM dual
    UNION SELECT '2','b' FROM dual
    UNION SELECT '4','c' FROM dual
    UNION SELECT '3','c' FROM dual
) a   // 注意这是a表
LEFT JOIN
(
        SELECT 'A' C,'a' D FROM dual
    UNION SELECT 'B','a' FROM dual
    UNION SELECT 'C','c' FROM dual
    UNION SELECT 'D','d' FROM dual
) b  //注意这是b表

ON a.b = b.d;


注意:以下所有的连接查询都是要遵循  ON a.b = b.d 这个条件来查询的,切不可忽视这个条件!且这个条件必须定义,一般用ID字段来做比较,如: ON a.id = b.id,这里的举例没有ID字段,所以就用值来比较

内连接  INNER JOIN,它是查询两个表里面都相匹配的数据,如果一张表里面有数据而另一张表里面没有,则两张表的这两条数据都不显示。

上图SQL举例: a表里面的'2','b'这一条数据,根据 ON a.b = b.d 来查询 b表的D字段的话,D字段是没有 b 这个值的,所以a表里面的'2','b'不会被查出来。同理,

b表里面的 'D','d' 里面的d 在 a 表里面也是没有的,所以这条数据也不会显示出来。 如果看完这段话你感觉晕了的话,再次强调:请注意 ON a.b = b.d; 这个条件!

左连接(左外连接) LEFT JOIN , 它是查询LEFT JOIN关键字左边那张表里面的全部数据和右边那张表里相匹配的数据,如果左表里面某个值右表里面没有,那么左表的这条数据还是会被显示出来,而右表因为没有对应的数据,所以会用NULL来填充。

上面SQL举例:同样是 a 表里面的'2','b'这一条数据,因为'b'这个值在  b表里面是没有的,所以查出来的这条记录就是   '2','b',null,null 。

右连接(右外连接) RIGHTJOIN , 它是查询RIGHT JOIN关键字右边那张表里面的全部数据和左边那张表里相匹配的数据,和LEFT JOIN正好相反。如果右表里面某个值在左表里面没有,那么右表的这条数据还是会被显示出来,而左表因为没有对应的数据,所以会用NULL来填充。

上面SQL举例:比如 b 表里面的'D','d'这一条数据,因为'd'这个值在  a 表里面是没有的,所以查出来的这条记录就是   'D','d',null,null 。

全连接 FULL JOIN ,  如果上面的左连接右连接你看懂了,那么这个就简单了,这个连接就是查询两张表里面的全部数据,就好比上面的左连接,它只会查出'2','b',null,null  这条记录,不会查出 'D','d',null,null  这条记录,而右连接则是只会查出   'D','d',null,null  这条记录而不会查出 '2','b',null,null 这条记录。现在全外连接就不同了,

它只要是记录就会显示,也就是说 '2','b',null,null  和 'D','d',null,null 两条记录都会显示出来。 

 
交叉连接 CROSS JOIN ,

语法:
带WHERE: select * from T_student, T_class 或 select * from T_student CROSS JOIN T_class //这种写法左表的每一条数据都会和右表的所有数据都匹配一遍。
带WHERE :select * from a cross join b where ON a.b = b.d    //这种写法和内连接查询的结果是一样的

如果你还是没有看懂,请把上面的SQL拿到ORACLE数据库里面去测试查询,认真看它的查询结果。再次强调,所有的查询结果都是根据 ON这个关键字后面的条件查询的,切记!(转载请注明出处)





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值