mysql的join语句使用_MySQL开发技巧——如何正确使用Join语句



SQL语言相信学过数据库的人都会使用,但是能正确使用SQL的人却相对不多。正确使用SQL很重要吗?当然,下面我就列出了正确使用SQL语句的几个好处:

增加数据库的处理效率,减少相应的响应时间。

减少数据库的服务器负载,增加服务器稳定性。

减少服务器间通讯的网络流量。

这篇文章,我将先介绍如何正确的使用Join从句

举例中使用的表如下:西天取经四人组 VS 悟空的朋友们

2ecfa4294dfff5a837b2c142e3dd3541.png   

d6f297b2f2b73b6bc716964a8cb0f656.png

首先,我们来看看SQL标准中Join的类型

内连接(INNER)

全外连接(FULL OUTER)

左外连接(LEFT OUTER)

右外连接(RIGHT OUTER)

交叉连接(CROSS)

我们首先根据上面的两张表,来介绍这五种Join类型的使用场景

Join操作的类型——Inner Join

内连接Inner join基于连接谓词将两张表(如A和B)的列组合在一起,产生新的结果表。

2d70399416f5b255db01deaf2de6232d.png

我们写出查询语句如下:SELECT a.user_name,a.id.b.id FROM t1 a INNER JOIN t2 b ON a.user_name=b.username;连接谓词是 user_name。

5883e5df12d37e7c37119f0eb2a4c37d.png

由查询结果可以看出:我们得到的是两张表的公共部分。

Join操作的类型——Left Outer Join

74cb3813b3e7e03e8f645f9a1ba3c8b6.png

举个例子:我们要查询取经四人组中哪些人不是悟空的结拜兄弟?

查询语句:SELECT a.user_name,a.id,b.id FROM t1 a LEFT JOIN t2 b ON a.user_name=b.user_name WHERE b.username IS NULL;

948e8b6b81215f5f40ec7d5608131130.png

Join操作的类型——Right Outer Join

e749a680e9684e933aab3c836002ecab.png

举个例子:我们要查询悟空的结拜兄弟中哪些人没有去取经?

查询语句:SELECT b.user_name,b.id,a.id FROM t1 a RIGHT JOIN t2 b ON a.user_name=b.user_name WHERE a.user_name IS NULL;

1ec3ef235303d1d09199d9528011f06c.png

Join操作的类型——Full Join

eb74fbe3c5f9be407ef165441e04d91e.png

MySQL中默认是不能使用全连接类型的,如果使用,则会报错。

那么问题就来了:Full Join的问题该如何解决呢?我们可以用UNION ALL操作来间接使用Full Join。

查询语句:SELECT a.user_name,a.id,b.id FROM t1 a LEFT JOIN t2 b ON a.user_name=b.user_name UNION ALL SELECT b.user_name,b.id,a.id FROM t1 a RIGHT JOIN t2 b ON a.user_name=b.user_name;

462b19bb8246dbdea90f314c5fbd25f0.png

Join操作的类型——Cross Join

交叉连接,又称笛卡尔连接(cartesian join)或叉乘(Product),如果A和B是两个集合,它们的交叉连接就记为:A x B。

注意:笛卡尔连接里面没有连接关键词 ON 。

查询语句:SELECT a.user_name,a.id,b.user_name,b.id FROM t1 a CROSS JOIN t2 b;

7ac330c1fb2d63928afef6bfa41ed91d.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值