zoukankan      html  css  js  c++  java
  • SQL中LEFT JOIN ON AND 与 LEFT JOIN ON WHERE的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

    ON...WHERE

    select * from tb_students ts left join tb_class tc on ts.cid = tc.id where tc.classcode = '1801' order by ts.id

    SQL执行过程:

    1. 生成临时表: ON条件: ts.cid = tc.id

    2. 对临时表进行过滤: WHERE条件: tc.classcode = '1801'

    ON...AND

    select * from tb_students ts left join tb_class tc on ts.cid = tc.id and tc.classcode = '1801' order by ts.id

    SQL执行过程:

    1. 生成临时表: ON条件: ts.cid = tc.id and tc.classcode = '1801' (条件不为真也会返回左表中的记录)

    总结

     使用LEFT JOIN时,ON...AND和ON...WHERE条件的区别如下:

    1. ON...WHERE:在临时表生成后,再对临时表的数据进行过滤,再返回左表。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
    2. ON...AND:在临时表生成的过程时,ON中的条件不管是否为真,都将返回左表。

    3. 以上结果的关键原因就是LEFT JOIN,RIGHT JOIN,FULL JOIN的特殊性,不管ON上的条件是否为真都会返回LEFT或RIGHT表中的记录,FULL则具有LEFT和RIGHT的特性的并集。而INNER JOIN没这个特殊性,则条件放在ON中和WHERE中,返回的结果集是相同的。

  • 相关阅读:
    iostream迭代器操作"txt文本文件"无法写入的思考
    Qt 相对路径 绝对路径
    "lambda"和“bind”的初步思考
    "partition"和“stable_partition”的思考
    "accumulate"的思考
    顺序容器“inset”的思考
    C++重载函数 const形参 引用指针 const_cast
    C++ 可变参数的函数
    JDK8流式处理常用例子
    JDK8时间新API
  • 原文地址:https://www.cnblogs.com/jiangxin007/p/9117855.html
Copyright © 2011-2022 走看看