zoukankan      html  css  js  c++  java
  • 数据库左连接的一点知识

    数据库左连接的一点知识

     

    数据库的做链接我们经常遇到,有一次发现了顺序问题,没有搞明白,现在在回顾总结下。

    首先创建2张表A,B,然后插入初始化数据。

    create table A(id int);
    create table B(id int);
    
    INSERT INTO A VALUES(1);
    INSERT INTO A VALUES(2);
    INSERT INTO A VALUES(3);
    
    INSERT INTO B VALUES(1);
    INSERT INTO B VALUES(2);
    INSERT INTO B VALUES(3);
    
    SELECT * FROM A;
    SELECT * FROM B;
    
    id
    
    
    
    
    id
    
    
    
    
    我们假设命名为Case1.
    --现在看看这个左连接
    select a.*,b.*
    from   A a left join B b 
    on     a.id =b.id and a.id=2;  
    
    id          id
    ----------- -----------
               NULL
               2
               NULL
    
     
    
    这里我们假设命名为Case2
    --看看下面这个
    select a.*,b.* 
    from   A a left join B b 
    on     a.id =b.id 
    where  a.id=2;
    
    id          id
    ----------- -----------
               2

    于是出现了Case1与Case2两种不同的结果,这里说明了什么呢?

    首先我们要知道什么是左连接:左连接的关键字是Left join ,

    LEFT JOIN 关键字会从左表 (A) 那里返回所有的行,即使在右表 (B) 中没有匹配的行,显示为空值(NULL)。

    Case1没有用到where筛选,Case2用到了Where筛选

       在使用left jion时,on和where条件的区别如下: 

    1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

    ( left join:一旦加上where条件,则显示的结果等于inner join)

      其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。

    而inner join没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

    例如,

    select a.*,b.*
    from   A a left join B b 
    on     a.id =b.id and a.id=4;  
    
    id       id
            NULL
            NULL
            NULL

    这里看到,用and的时候,不管条件为真还是假都返回left或right表中的记录

    select a.*,b.* 
    from   A a left join B b 
    on     a.id =b.id 
    where  a.id=4;
    
    id     id

    这里没有查询出任何数据,

    可以看出 

    left join:一旦加上where条件,则显示的结果等于inner join

    select a.*,b.*
    from   A a inner join B b 
    on     a.id =b.id and b.id=2;  
    
    id   id
    2     2

    而inner join没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

    基本查询情况就是这样子的。

    共同学习,共同进步!
  • 相关阅读:
    Python自然语言处理读书笔记第7章
    [转]基于SNS的文本数据挖掘
    使用python多线程实现一个简单spider
    基于内存共享的并行排序算法慢谈(中)
    [转]为什么我反对纯算法面试题
    从客户端检测到有潜在危险的Request.Form值
    repeater 回发或回调参数无效
    Nginx安装、平滑升级与虚拟机配置
    log4j.properties的配置示例
    jquery一般方法介绍
  • 原文地址:https://www.cnblogs.com/karkash/p/3014287.html
Copyright © 2011-2022 走看看