您的位置:首页 > 数据库 > MySQL

MySQL开发技巧——如何正确使用Join语句

2015-08-03 07:51 561 查看

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

增加数据库的处理效率,减少相应的响应时间。
减少数据库的服务器负载,增加服务器稳定性。
减少服务器间通讯的网络流量。

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

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





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

内连接(INNER)
全外连接(FULL OUTER)
左外连接(LEFT OUTER)
右外连接(RIGHT OUTER)
交叉连接(CROSS)

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

Join操作的类型——Inner Join

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



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



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

Join操作的类型——Left Outer Join



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

查询语句: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;



Join操作的类型——Right Outer Join



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

查询语句: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;



Join操作的类型——Full Join



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;



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;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: