zoukankan      html  css  js  c++  java
  • SQL中的LEFT JOIN 和 RIGHT JOIN 以及INNER JOIN

    用一个简单的实例说明一下left join, right join, inner join,建立两个表,使用mysql做一下关联实验:

    create_db.sql:

    create database small_product;
    
    use small_product;
    
    create table `product` (
        `id` int(10) unsigned NOT NULL auto_increment,
        `amount` int(10) unsigned default NULL,
        PRIMARY KEY (`id`)
    ) ENGINE=MYISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
    
    create table `product_details` (
        `id` int(10) unsigned NOT NULL,
        `weight` int(10) unsigned default NULL,
        `exist` int(10) unsigned default NULL,
        PRIMARY KEY(`id`)
    )ENGINE=MYISAM DEFAULT CHARSET=latin1;
    
    insert into product (id, amount)
        values (1, 100), (2, 200), (3, 300), (4, 400);
    
    insert into product_details (id, weight, exist)
        values (2, 22, 0), (4, 44, 1), (3, 33, 2), (6, 66, 4);

    使用左关联,将product作为主表:

    select * from product left join product_details
        on (product.id = product_details.id);

    得到结果是这样的.

    使用右关联,将product_details作为主表:

    select * from product right join product_details
        on (product.id = product_details.id);

    使用inner join:

    select * from product inner join product_details
        on (product.id = product_details.id);

    简单的理解就是,左关联以左边的表为主,把数据先从左边的表中找出来,再根据关联字段去找右边表的数据,没有的话,显示NULL。

    右关联则以右边的表为主,把数据先从右边表中找出来,再根据关联字段去找左边表的数据,没有的话,同样显示NULL。

    inner join是不能包括NULL的,如果使用等值运算符的话,必须两张表中的关联字段相等才行。

    关于使用On子句和Where子句的不同:

    select * from product left join product_details
        on (product.id = product_details.id)
            and product_details.id = 2;

    使用where子句:

    select * from product left join product_details
        on (product.id = product_details.id)
            where product_details.id = 2;

    where子句是在匹配结束后执行过滤条件的,所以只有一行结果。

    参考:http://www.oschina.net/question/89964_65912?sort=default&p=1#answers

  • 相关阅读:
    perl学习之路3
    perl学习之路1
    年少的忧伤
    莎士比亚的情诗
    自做贪吃蛇游戏的android实现
    伤感的蝴蝶
    爱上下拉列表框Spinner
    相识RadioGroup初恋CheckBox
    EditText和Button的纠缠
    谁陪我一起打包Andriod应用
  • 原文地址:https://www.cnblogs.com/jaw-crusher/p/3510921.html
Copyright © 2011-2022 走看看