zoukankan      html  css  js  c++  java
  • MySQL 使用JOIN优化子查询

    1.数据准备

    mysql> select * from student;

    +----+--------+----------+---------+-------------+

    | id | name   | idCardNo | isCadre | nickname    |

    +----+--------+----------+---------+-------------+

    |  1 | Tom    | 350020   |       1 | Big T       |

    |  2 | Jim    | 350022   |    NULL | PP          |

    |  3 | Lucy   | 460311   |    NULL | Little girl |

    |  4 | Liming | 733098   |       1 | NULL        |

    +----+--------+----------+---------+-------------+

    mysql> select * from cadre;

    +----+--------+----------+-----------+

    | id | name   | idCardNo | nickname  |

    +----+--------+----------+-----------+

    |  1 | Tom    | 350020   | Last Tom  |

    |  2 | Max    | 636095   | Hand      |

    |  3 | Liming | 733098   | China Boy |

    +----+--------+----------+-----------+

    要求:查询出student表中所有人员信息及其在cadre表中的nickname

    ① 子查询方式

    SELECT a.idcardNo, a.name, a.nickname, (SELECT b.nickname FROM cadre b WHERE b.name=a.name) AS nickname_b FROM student a;

    +----------+--------+-------------+------------+

    | idcardNo | name   | nickname    | nickname_b |

    +----------+--------+-------------+------------+

    | 350020   | Tom    | Big T       | Last Tom   |

    | 350022   | Jim    | PP          | NULL       |

    | 460311   | Lucy   | Little girl | NULL       |

    | 733098   | Liming | NULL        | China Boy  |

    +----------+--------+-------------+------------+

    子查询的方式中,针对student表的每条记录都会对cadre表进行一次查询,效率较低。

    ② 使用JOIN优化方式

    SELECT a.idCardNo, a.name, a.nickname, b.nickname FROM student a LEFT JOIN cadre b ON a.name=b.name;

    +----------+--------+-------------+-----------+

    | idCardNo | name   | nickname    | nickname  |

    +----------+--------+-------------+-----------+

    | 350020   | Tom    | Big T       | Last Tom  |

    | 733098   | Liming | NULL        | China Boy |

    | 350022   | Jim    | PP          | NULL      |

    | 460311   | Lucy   | Little girl | NULL      |

    +----------+--------+-------------+-----------+

     

  • 相关阅读:
    slice()与splice()
    apply和call函数
    参数arguments
    获取用户当前位置并设为中心点
    数组中元素为对象形式的去重
    判断浏览器环境(微信、支付宝)
    h5车牌号输入键盘
    点击事件的延迟
    jQuery修改伪元素
    webSocket认识
  • 原文地址:https://www.cnblogs.com/techroad4ca/p/5738643.html
Copyright © 2011-2022 走看看