zoukankan      html  css  js  c++  java
  • 数据库多表连接

    1.在多表查询中,一些SQL开发人员更喜欢使用WHERE来做join,比如:

    SELECT A.ID AS aid,B.ID AS bid FROM A,B WHERE A.`ID` = B.ID

    缺点:在上面语句中,实际上是创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。在笛卡尔连接中,在上面的例子中,如果有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。 这是一种低效利用数据库资源,数据库多做100倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。

    为了避免创建笛卡尔积,应该使用INNER JOIN :

    SELECT A.ID AS aid,B.ID AS bid FROM A INNER JOIN B ON A.`ID` = B.ID

    优点:如上面语句,使用inner join 这样数据库就只产生等于ID 的1000条目标结果。增加了查询效率。

    有些数据库系统会识别出 WHERE连接并自动转换为 INNER JOIN。在这些数据库系统中,WHERE 连接与INNER JOIN 就没有性能差异。但是, INNER JOIN 是所有数据库都能识别的,因此DBA会建议在你的环境中使用它。

    INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    

    注意: 
    1、INNER JOIN 等同于 JOIN; 
    2、示意图: 

    作业:

  • 相关阅读:
    生成器
    字典生成式
    列表推导式
    函数基础实战之ATM和购物车系统
    函数基础小结
    函数嵌套
    可变长参数
    函数参数
    java NIO(三)----通道(Channel)
    java NIO(二)----直接缓冲区和非直接缓冲区
  • 原文地址:https://www.cnblogs.com/python-machine/p/6913966.html
Copyright © 2011-2022 走看看