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

mysql学习十之mysql的连接查询,内连接,外连接,全连接,连接的判断关键字

2019-01-21 20:35 1231 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/86568563

一、为什么要连接查询

        因为每个实体是一张表,一个业务逻辑使用多个实体的数据。多张表应该在一起使用,将多个表的的记录连接起来。总体思路就是将所有的数据,按照某种条件连接起来,再进行筛选处理。

二、连接查询的分类

连接查询的分类

可以将连接查询分为:内连接,外连接,自然连接。

三、内连接

      数据内部的连接,要求连接的每个数据都必须存在才能进行连接。

内部连接

1、内部连接的步骤:

     第一步:先连接

             如上图:先让join_teacher表的第一条记录与join_teacher_class表的第一条记录进行连接,形成一条新的记录。

     第二步:判断条件判断

             如上图:有on判断条件进行判断,是否符合判断条件,并对符合判断条件的记录进行保留。

     第三步:重新连接

             如上图:第一步是join_teacher表的第一条记录与join_teacher_class表的第一条记录进行的连接,现在是join_teacher的第一条记录和后者表的第二条记录进行连接。然后再用条件判断。是否符合判断条件。符合保留,不符合弃掉。就这样一直进行下去。直到两个表的记录都连接过,最终得到的结果是判断后的结果,两个表中一个不存在都不会保留下来。

2 、交叉连接

        内连接在连接时如果省略掉连接条件,那就意味着所有的左表数据都要与右表做一个连接,那就是一个笛卡尔积,假如左表有M条记录,右表有N条记录,那么总共就有MxN条记录。这种连接就称为交叉连接,或者笛卡尔积。表示获取了最多的数据。此时可以用cross join关键字,相当于没有条件的内连接。

交叉连接没有判断条件的内连接

            从内连接的执行过程来看只有两个数据都存在才能进行连接。

3、内连接的关键字

            inner join ,   由于mysql是默认内连接因此直接写个join也行。on是连接条件语句。当没有判断条件时也可以写成交叉连接形式。也可以不用where的查询方式。

笛卡尔积的简单形式

这种写法就是查询两个表,两个表中间由逗号隔开,最后查询的结果就是交叉查询的结果,或者笛卡尔积的简单形式。

4、内连接中的where,on,using判断语句

  1. on:条件判断是,两个表连接一条记录,就判断一次。
  2. where:是等两个表的记录都连接完成后,相当于笛卡尔积后,再进行判断。
  3. using:是一种高级的写法,Using要求负责连接的两个实体之间的字段名称一致。字段不一样连接不上。
Using判断 含有where判断的内连接

上图where是内连接筛选后再进行判断。

5、内连接的判断选用

注意:因为where做判断时,需要求出笛卡尔积,大量浪费了时间,因此在做连接查询时尽量不用where做条件,在数据过滤时再用where。

查询条件与外连接通用,但是外连接不能使用where作为连接查询条件。

6、注意事项

此外对于别名问题,如果sql语句很长,可以给表设置别名:tbl_name as 别名;保证简介和清晰。

用as作别名

四、外连接

外连接分为左外连接,右外连接,全外连接(暂时不支持)。外连接的关键字有:left outer join,right outer join  其中outer可以不写

1、左外连接

        由于在连接时,如果出现左边表,数据连接不到右边表的情况,则左边表的数据被保留,而如果右边表的数据连接不到左边表,右边表的数据将会被遗弃。

左外连接

 2、右外连接

         同理,在连接时如果右边表连接不到左边表的情况,则右边表的数据被保留,而如果左边表的数据连接不到右边表,左边表的数据将被遗弃。

右外连接

3、全连接

        没有全连接的独自语句,但是可以通过union关键字将左外连接和右外连接联合到一块进行连接。如图所示:

全外连接

全外连接是通过左连接表和右连接一块联合搞的。

全外连接结果

其结果也是将两者的结果,并用distinct默认去重了。

五、外连接的判断条件

1、外连接的判断条件不允许使用where判断条件,因此只能使用on,和using去判断。

2、using判断条件的使用必须是在两个实体表的字段相同的条件下才能使用。using会去掉结果中的重复字段并将连接字段放在列前

using判断连接字段在前

3、外连接不支持没有条件的连接,如果没有条件,外连接将报错。

六、外连接和内连接的区别和联系

1、内连接和外连接都是进行多表查询的。

2、内连接连接时必须知道连接的表之间都有相同的连接字段数据,如果没有,将不会返回结果。

3、外连接不需要知道连接的表之间是否有相同字段的数据,如果没有就会设置为null.

4、using判断条件是,连接的表之间必须有相同的字段,注意这里说的是字段不是字段中的数据。我感觉还是最好使用其他条件。

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