美文网首页工作专题数据库SQL
left join on XXX and XXX 和 l

left join on XXX and XXX 和 l

作者: michael_wlq | 来源:发表于2016-10-24 19:52 被阅读179次

    结论:

    通过多表联查查询数据时,数据库会产生一个中间临时表,然后将临时表返回给用户。
    1、ON条件是在生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左边表中的记录;
    2、WHERE条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有LEFT JOIN的含义(必须 返回左边表的记录)了,条件不为真的就全部过滤掉;
    3、AND 是过滤之后再连接,WHERE是连接之后再过滤。

    一、应用场景

    1> SELECT 
             A.*,  B.* 
       FROM 
             Table A LEFT JOIN Table B ON  ***  AND  ***
    
    2> SELECT 
             A.*,  B.* 
       FROM 
             Table A LEFT JOIN Table B ON  ***  WHERE  ***
    

    二、示例

    表结构及数据:
    CREATE TABLE product (
      id int(11) unsigned NOT NULL COMMENT 'ID',
      name varchar(32) NOT NULL DEFAULT '' COMMENT '物品名称',
      PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    CREATE TABLE price (
      id int(11) unsigned NOT NULL COMMENT ID,
      price int(11) unsigned NOT NULL DEFAULT '0' COMMENT '物品价格',
      PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    INSERT INTO product (id, name) VALUES ('1', 'A');
    INSERT INTO product (id, name) VALUES ('2', 'B');
    INSERT INTO product (id, name) VALUES ('3', 'C');
    
    INSERT INTO price (id, price) VALUES ('1', '100');
    INSERT INTO price (id, price) VALUES ('2', '200');
    
    (1) left join on 后跟AND查询
    SELECT
        A.id productId,
        A.name name,
        B.id priceId,
        B.price price
    FROM
        product A
    LEFT JOIN price B ON A.id = B.id
    AND B.price = 100
    

    查询结果:


    后跟AND结果.jpg
    (2) left join on 后跟WHERE查询
    SELECT
        A.id productId,
        A.name name 
        B.id priceId,
        B.price price
    FROM
        product A
    LEFT JOIN price B ON A.id = B.id
    WHERE B.price = 100
    

    查询结果:


    后跟WHERE结果.jpg

    【注意】left join会以左表(主表)的基准数据,凡左表出现的数据均会被查询出来,然后join右表(从表),只要关联上的就需要查出来,如果相应的字段没有值或不符合条件的话就置为NULL。

    相关文章

      网友评论

        本文标题:left join on XXX and XXX 和 l

        本文链接:https://www.haomeiwen.com/subject/iqpluttx.html