zoukankan      html  css  js  c++  java
  • MySQL 7种 JOIN连表方法

    规定:左边的圆代表表 a,右边的代表 b。 

    JOIN 关键字可以在两表之间选中任意部分。】

    通过以下代码制造一些数据:

    delimiter //
    drop procedure if exists produce_data//
    create procedure produce_data()
    begin
    declare i int default 0;
    drop table if exists a;
    drop table if exists b;
    create table a(id int not null,name varchar(32));
    create table b(id int not null,name varchar(32));
    set i = 1;
    while i <= 4 do
    insert into a(id,name) values(i, concat('name', i));
    set i = i + 1;
    end while;
    set i = 3;
    while i <= 6 do
    insert into b(id,name) values(i, concat('name', i));
    set i = i + 1;
    end while;
    end//
    call produce_data()//
    mysql> select * from a//
    +----+-------+
    | id | name |
    +----+-------+
    | 1 | name1 |
    | 2 | name2 |
    | 3 | name3 |
    | 4 | name4 |
    +----+-------+
    mysql> select * from b//
    +----+-------+
    | id | name |
    +----+-------+
    | 3 | name3 |
    | 4 | name4 |
    | 5 | name5 |
    | 6 | name6 |
    +----+-------+

    select * 
    from a left join b on a.id = b.id//


    +----+-------+------+-------+ | id | name | id | name | +----+-------+------+-------+ | 1 | name1 | NULL | NULL | | 2 | name2 | NULL | NULL | | 3 | name3 | 3 | name3 | | 4 | name4 | 4 | name4 | +----+-------+------+-------+

    select *
    from a right outer join b on a.id = b.id//
     
    +------+-------+----+-------+ | id | name | id | name | +------+-------+----+-------+ | 3 | name3 | 3 | name3 | | 4 | name4 | 4 | name4 | | NULL | NULL | 5 | name5 | | NULL | NULL | 6 | name6 | +------+-------+----+-------+

    select *
    from a inner join b on a.id = b.id//
     
    
    +----+-------+----+-------+
    | id | name | id | name |
    +----+-------+----+-------+
    | 3 | name3 | 3 | name3 |
    | 4 | name4 | 4 | name4 |
    +----+-------+----+-------+

    select * 
    from a left join b on a.id = b.id
    where b.id is null//
     
    
    +----+-------+------+------+
    | id | name | id | name |
    +----+-------+------+------+
    | 1 | name1 | NULL | NULL |
    | 2 | name2 | NULL | NULL |
    +----+-------+------+------+

    select *
    from a right join b on a.id = b.id
    where a.id is null//
     
    
    +------+------+----+-------+
    | id | name | id | name |
    +------+------+----+-------+
    | NULL | NULL | 5 | name5 |
    | NULL | NULL | 6 | name6 |
    +------+------+----+-------+

    一般,是这样写: 

    select * 
    from a full outer join b on a.id = b.id
    where a.id is null or b.id is null//


     但是,mysql 并没有 FULL 关键字,因此使用 UNION 联接 左连接和 右连接。

    select * 
    from a left join b on a.id = b.id
    where b.id is null
    union
    select *
    from a right join b on a.id = b.id
    where a.id is null//
    +------+--------+------+--------+
    | a_id | a_name | b_id | b_name |
    +------+--------+------+--------+
    | 1 | name1 | NULL | NULL |
    | 2 | name2 | NULL | NULL |
    | NULL | NULL | 5 | name5 |
    | NULL | NULL | 6 | name6 |
    +------+--------+------+--------+

     


     类似上面,使用UNION

    select a.id a_id, a.name a_name, b.id b_id, b.name b_name
    from a left join b on a.id = b.id
    union
    select a.id a_id, a.name a_name, b.id b_id, b.name b_name
    from a right join b on a.id = b.id//
    +------+--------+------+--------+
    | a_id | a_name | b_id | b_name |
    +------+--------+------+--------+
    | 1 | name1 | NULL | NULL |
    | 2 | name2 | NULL | NULL |
    | 3 | name3 | 3 | name3 |
    | 4 | name4 | 4 | name4 |
    | NULL | NULL | 5 | name5 |
    | NULL | NULL | 6 | name6 |
    +------+--------+------+--------+
  • 相关阅读:
    关于this指向思考
    (转) 那些无用的人----《人类简史》读后感
    常见数组&字符串API及其应用场景总结
    每当十一过了,总让我想起新年快了
    JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)
    关于Switch结构利用
    ios GCD同步异步
    IOS 实现TXT文本自动识别编码的方法
    iOS开发网络篇之文件下载、大文件下载、断点下载
    ios 自定义NSError
  • 原文地址:https://www.cnblogs.com/mashangsir/p/11326486.html
Copyright © 2011-2022 走看看