zoukankan      html  css  js  c++  java
  • 浅谈Sql各种join的用法

    1、left join、right join、inner join三者区别

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行

    新建两张表进行测试:

    表a

    CREATE TABLE a (
      user_id VARCHAR(30) DEFAULT NULL,
      user_name VARCHAR(30) DEFAULT NULL,
      user_age VARCHAR(30) DEFAULT NULL,
      user_num VARCHAR(30) DEFAULT NULL,
      user_sex VARCHAR(30) DEFAULT NULL
    )

    表b

    CREATE TABLE b (
      user_id VARCHAR(30) DEFAULT NULL,
      user_phone VARCHAR(30) DEFAULT NULL
    )

    插入数据:

    insert into a (user_id, user_name, user_age, user_num, user_sex) values('001','test001','20','110','male');
    insert into a (user_id, user_name, user_age, user_num, user_sex) values('002','test002','20','119','female');
    insert into b (user_id, user_phone) values ('001','110112119')

    2、相关测试

    测试left join

    SELECT * FROM a LEFT JOIN b  ON a.user_id= b.user_id;

    测试right join

    SELECT * FROM a RIGHT JOIN b  ON a.user_id= b.user_id;

    测试inner join

    SELECT * FROM a INNER JOIN b  ON a.user_id= b.user_id;

    3、其他提示

    有时候也可以换种思路进行sql写法:

    比如:想取a表数据,user_id不在b表的信息

    left join会有两条数据

    本来预期的结果是002这条记录。变成了两条,所以这种用法不可取。

    right join

    看似可以,再往b加条数据

    变成这样了,001怎么又冒出来了,所以这种不可取。

    inner join

    这样更不行了,也不可取。

    换种思路比如

    1、not in

    比如可以写:

    select *from a where a.user_id not in(select b.user_id from b)【选取a表id不在b表的数据】

    2、not exists 

    select *from a where a.user_id not exists(select b.user_id from b)【选取a表id不在b表的数据】

     当然数据量大的话,要看看这两种的性能了:

     选中SQL,右键 点击 解释计划 【F5快捷键】

    查看耗费和基数,耗费和基数越小,代表查询效率越高。所以这个时候选用not exists性能更佳。

    另外数据量大的话可以通过建立索引也可以提高效率

    小数据量distinct 稍稍快点
    稍大的数据量group by 稍稍快点

     
  • 相关阅读:
    数论分块与整除相
    P3254——DP&&入门
    P3384——树链剖分&&模板
    树链剖分模板
    P4145——线段树点修改&&模板题
    P1198最大数——线段树点修改&&模板题
    线段树(四)——两个标记(add和set)
    epoll 知识总结
    C++中的mutable关键字
    [LeetCode] Max Points on a Line
  • 原文地址:https://www.cnblogs.com/shawWey/p/6638209.html
Copyright © 2011-2022 走看看