MySQL的JOIN用法 - 起点终站

我们应该感谢相遇,无论结局是喜是悲....
MySQL的JOIN用法
  • 首页 > 教程小结
  • 作者:起点终站
  • 2018年4月24日 18:29 星期二
  • 浏览:72528
  • 字号:
  • 评论:1
  • JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。


    笛卡尔积:CROSS JOIN

    要理解各种JOIN首先要理解笛卡尔积。笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。下面的例子,t_blog有10条记录,t_type有5条记录,所有他们俩的笛卡尔积有50条记录。有五种产生笛卡尔积的方式如下。

        SELECT * FROM t_blog CROSS JOIN t_type;
        SELECT * FROM t_blog INNER JOIN t_type;
        SELECT * FROM t_blog,t_type;
        SELECT * FROM t_blog NATURE JOIN t_type;
        select * from t_blog NATURA join t_type;


    内连接:INNER JOIN

    内连接INNER JOIN是最常用的连接操作。从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。有INNER JOIN,WHERE(等值连接),STRAIGHT_JOIN,JOIN(省略INNER)四种写法。


        SELECT * FROM t_blog INNER JOIN t_type ON t_blog.typeId=t_type.id;
        SELECT * FROM t_blog,t_type WHERE t_blog.typeId=t_type.id;
        SELECT * FROM t_blog STRAIGHT_JOIN t_type ON t_blog.typeId=t_type.id; --注意STRIGHT_JOIN有个下划线
        SELECT * FROM t_blog JOIN t_type ON t_blog.typeId=t_type.id;


    左连接:LEFT JOIN

    左连接LEFT JOIN的含义就是求两个表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录。

        SELECT * FROM t_blog LEFT JOIN t_type ON t_blog.typeId=t_type.id;


    右连接:RIGHT JOIN

    同理右连接RIGHT JOIN就是求两个表的交集外加右表剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。

         SELECT * FROM t_blog RIGHT JOIN t_type ON t_blog.typeId=t_type.id;


    外连接:OUTER JOIN

    外连接就是求两个集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。

        SELECT * FROM t_blog LEFT JOIN t_type ON t_blog.typeId=t_type.id
        UNION
        SELECT * FROM t_blog RIGHT JOIN t_type ON t_blog.typeId=t_type.id;



    USING子句

    MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。 
    所以,USING的功能相当于ON,区别在于USING指定一个属性名用于连接两个表,而ON指定一个条件。另外,SELECT *时,USING会去除USING指定的列,而ON不会。实例如下。

        SELECT * FROM t_blog INNER JOIN t_type ON t_blog.typeId =t_type.id;
        
        SELECT * FROM t_blog INNER JOIN t_type USING(typeId);
        ERROR 1054 (42S22): Unknown column 'typeId' in 'from clause'
        SELECT * FROM t_blog INNER JOIN t_type USING(id); -- 应为t_blog的typeId与t_type的id不同名,无法用Using,这里用id代替下。


    自然连接:NATURE JOIN

    自然连接就是USING子句的简化版,它找出两个表中相同的列作为连接条件进行连接。有左自然连接右自然连接普通自然连接之分。在t_blog和t_type示例中,两个表相同的列是id,所以会拿id作为连接条件。 
    另外千万分清下面三条语句的区别 。
    自然连接:SELECT * FROM t_blog NATURAL JOIN t_type; 
    笛卡尔积:SELECT * FROM t_blog NATURA JOIN t_type; 
    笛卡尔积:SELECT * FROM t_blog NATURE JOIN t_type;


      您阅读这篇文章共花了:  
    本文作者:起点终站      文章标题: MySQL的JOIN用法
    本文地址:https://blog.hellozwh.com/?post=372
    版权声明:若无注明,本文皆为“起点终站”原创,转载请保留文章出处。
    • blogger
    VIP新电影2018-05-06 20:49
    感谢博主分享
    返回顶部| 首页| 手气不错| 网站地图| sitemap| 装逼生成器| 站长介绍|

    Copyright © 2016-2019 起点终站 闽ICP备16011094号-1