MySQL:连接查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL:连接查询相关的知识,希望对你有一定的参考价值。

每个实体,一个表

当一个业务需要多个实体的数据,显然需要多张表在一起使用,即将多张表的记录连接起来。

1. 总体思路

    先将所有数据按照某种条件,连接起来,再进行筛选处理。

2. 分类方式

   根据连接的条件不同,分为一下几类:

   ① 内连接(Inner):要求连接的多个数据都必须存在,才能进行连接。

       【举个栗子】如下三张表,分别记录了老师的信息,班级信息,以及老师们的代课情况。

                        此时,若想获得所有老师的代课信息,‘韩信’在表3中有与之配对的记录(内连接)

                            但发现孙武没有带过课,即表1中的‘孙武’在表3中没有与之配对的记录(外连接)。

    技术分享       技术分享      

             表1. 所有老师的信息                            表2. 所有班级的信息

    技术分享

                                  表3. 老师们的代课情况

     【语法】tbl_left inner join tbl_right on 连接条件;

     【举个栗子】求表1中的所有老师的开始代课时间、代课天数。

     技术分享

    tip : 内连接可以省略连接条件,意味着所有左表的数据都要与右表的记录做一次连接(交叉连接or笛卡尔积连接)。

           此时可以使用cross join代替inner join。

           实际上,可以使用多表查询的方式,不实用where,做到笛卡尔积。

          在mysql中,inner join是默认的连接方式,可以省略inner。

      【写法】1) on(写法如上一个例子)。

                   2) where(只需把on替换成where即可)。

                          结果一样,但是逻辑关系不同:where会先形成包含所有连接的笛卡尔积,再在这些数据中进行过滤;

                                              on 会先进行满足条件的数据过滤,在对过滤后的数据进行连接。

     【using】当有同名字段时,可以使用 using (字段名),进行条件约束。   

     【as】给表、字段起别名,可以把比较长的表名改成比较短的别名,保证简洁、清晰。

外连接(outer):负责连接的数据有一个或多个不存在

      【语法】tbl_name left outer join tbl_name on 连接条件;(也可以使用using,不使用where!!

        tip : 必须要有连接条件!!(内连接没有条件=笛卡尔积,但是外连接必须有)

     技术分享

    1) 左外连接;(left outer join)

         左连接时,若左表的数据连接不到右表的情况,则左表的数据在最终结果中被保留

              (如上图,左表中的‘孙武’没有连接到右表的数据,但是‘孙武’在最终数据中保留了下来);

               若右表数据连接不到左表,则最终结果中,右表数据被丢弃(如下图,交换两表的左右顺序,发现右表的‘孙武’被丢弃)。

    技术分享

    2) 右外连接

    3) 全外连接(MySQL不支持);

       (左连接)union(右连接);

   ③ 自然连接(natural):通过 MySQL 自己的判断完成连接过程,无需指明连接条件。

                                     MySQL 使用多表内相同的字段,作为连接条件

     【语法】 (表1) natural join (表2);  ----内

                  natural left join ----- 左外

                  natural right join --- 右外

3. 多表连接

以上是关于MySQL:连接查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL连接查询之内连接左连接右连接自连接

MySQL连接查询

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

Mysql数据库连接查询