Mysql多表查询 一、表连接查询

 1.1 多表查询的分类

    Mysql多表查询
一、表连接查询

   1.1.1 内连接查询

      * 隐式内连接:使用where条件消除无用数据

        * 语法:SELECT 字段列表 FROM 左表, 右表 WHERE 条件

 小贴士:

  * 笛卡尔积:
     * 有两个集合A,B,取这两个集合的所有组成情况。
     * 要完成多表查询,需要消除无用的数据
      * 如何消除笛卡尔积现象的影响?
        * 增加where条件进行筛选,过滤掉没有用的数据。

      * 显示内连接:使用INNER JOIN ... ON语句,INNER可以省略

        * 语法:SELECT 字段列表 FROM 左表 [INNER] JOIN 右表 ON 条件

      * 迫切内连接:使用INNER JOIN FETCH ... ON语句,INNER可以省略

        * 语法:SELECT 字段列表 FROM 左表 [INNER] JOIN FETCH 右表 ON 条件

 注意:隐式内连接和显示内连接的区别

    * 隐式内连接先查询数结果集(即先进行笛卡尔积运算,生成一个新的表格。),再根据where条件筛选数据。因为表的数据量大,效率低、耗内存。
    * 显示内连接在查询数据时,会根据on后面的条件进行数据筛选,逐条匹配。不会产生笛卡尔积现象,效率高。

   1.1.2 外连接查询

      * 左外连接:使用LEFT OUTER JOIN ... ON,OUTER可以省略

        * 语法:SELECT 字段列表 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

        * 结果集:查询的是左表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

      * 迫切左外连接:使用LEFT OUTER JOIN FETCH ... ON语句,OUTER可以省略

        * 语法:SELECT 字段列表 FROM 左表 LEFT [OUTER] JOIN FETCH 右表 ON 条件

        * 结果集:查询的是左表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

      * 右外连接:使用RIGHT OUTER JOIN ... ON,OUTER可以省略

        * 语法:SELECT 字段列表 FROM 左表 RIGHT [OUTER] JOIN 右表 ON 条件

        * 结果集:查询的是右表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

 小贴士:

   * 什么是迫切?

     * 及时将两个关联对象进行相互引用

   * 为什么没有迫切右外连接?

     * 因为封装的时候是以左对象为主键,右对象保全。所以若左对象为null,将右对象赋值给null是不合理的。

   1.1.3 查询关联表的所有数据(扩展)

      使用Union 和 Union All 操作符进行表数据的合并,使用前提是表或者查询的字段数、列表名称/类型相同。

      Union 和 Union All 的区别: 
      Union        在表链接后会对所产生的结果进行排序运算,删除重复的记录再返回合并结果。
      Union All       只是简单的将两个结果合并后返回。因不需去重,所以效率高于union。

      具体的介绍可参考:
        https://www.w3school.com.cn/sql/sql_union.asp 或者 https://www.runoob.com/sql/sql-union.html

 1.2 子查询

   1.2.1 概述

      查询中嵌套查询,即一个查询的结果作为另一个查询的条件,称嵌套查询为子查询。

   1.2.2 子查询用法

      子查询需用小括号括起来。

      (此处省略一万字... ...)