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

来源:互联网 发布:sql模糊查询通配符 编辑:程序博客网 时间:2024/04/29 17:41


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

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

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

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

       

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

  1. 内连接(INNER)
  2. 全外连接(FULL OUTER)
  3. 左外连接(LEFT OUTER)
  4. 右外连接(RIGHT OUTER)
  5. 交叉连接(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;

   


   

0 0