zoukankan      html  css  js  c++  java
  • MySql多表查询

    一、笛卡尔积现象

      多表查询时,两张表的数据量发生错误,总数据为表1*表2的数据,显然不是我们想要的,这是笛卡尔积现象。

    二、如何清除笛卡尔积现象

      多表查询的时候,通过条件过滤掉不需要的数据。条件:外键=主键。

    三、内连接

    什么是内连接

      多表查询时,只要满足条件的数据

    隐式内连接

    隐式内连接:看不到JOIN关键字,条件使用WHERE指定

    SELECT * FROM 左表, 右表 WHERE 条件;

    显式内连接

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

        SELECT * FROM 左表 INNER JOIN 右表 ON 表连接条件 WHERE 查询条件;

    四、外连接
      
      左外连接

        
    将满足要求的数据显示,左表不满足要求的数据也显示(在内连接的基础上,保证左表的数据全部显示)
        
    - 左外连接:使用`LEFT OUTER JOIN ... ON`,`OUTER`可以省略
    
    ```sql
    SELECT * FROM 左表 LEFT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;

      右外连接  

        将满足要求的数据显示,右表不满足要求的数据也显示(在内连接的基础上,保证右表的数据全部显示)
    右外连接:使用`RIGHT OUTER JOIN ... ON`,`OUTER`可以省略
    
    ```sql
    SELECT * FROM 左表 RIGHT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;
    ```

    五、子查询

      什么是子查询

        将一个查询结果作为另一个查询语句的一部分。

      子查询的三种情况

      子查询的结果是单行单列的时候

    子查询结果是`单列`,在`WHERE`后面作为`条件`
    `SELECT 查询字段 FROM 表 WHERE 字段=(子查询);`

    子查询的结果是多行单列的时候

    子查询结果是多行单列,结果集类似于一个数组,在`WHERE`后面作为`条件`,父查询使用`IN`运算符
    
    ```sql
    SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
    ```

    子查询的结果是多行多列

    子查询结果是`多列`,在`FROM`后面作为`表` 
    
    ```sql
    SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
    ```
    
    子查询作为表需要取别名,否则这张表没用名称无法访问表中的字段
     
  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/mengjialian/p/12523475.html
Copyright © 2011-2022 走看看