LEFT SEMI JOIN:左半开连接会返回左边表的记录,前提是其记录对于右边表满足ON语句中的判定条件。对于常见的内连接(INNER JOIN),这是一个特殊的,优化了的情况。大多数的SQL方言会通过in.......exists结构来处理这种情况。

准备表:

create table dcx1107(
id bigint
);
insert into dcx1107 values(-1);
insert into dcx1107 values(1);

create table dcx_2(
id bigint
,role string
);

insert into dcx_2 values(-1,'C1');
insert into dcx_2 values(1,'C1');
insert into dcx_2 values(1,'C2');

查询数据:

--join的select的结果中可以有t1(左表),t2(右表)两张表的字段
select 
t1.id,t2.role
from dcx1107 t1
join dcx_2 t2
on t1.id=t2.id;

结果:

--left semi join的select的结果中只允许出现t1(左表)表的字段
select 
t1.id
from dcx1107 t1
left semi join dcx_2 t2
on (t1.id=t2.id);

--等价于
 select 
t1.id
from dcx1107 t1
where id in (select id from dcx_2)
;

--等价于
 select 
t1.id
from dcx1107 t1
where EXISTS (select 1 from dcx_2 t2 where t1.id=t2.id)

结果:

这样写会报错
select 
t1.id,t2.role
from dcx1107 t1
left semi join dcx_2 t2
on (t1.id=t2.id);

总结:

对待右表中重复key的处理方式差异:因为 left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过,而 join on 则会一直遍历。
left semi join 中最后 select 的结果只许出现左表,因为右表只有 join key 参与关联计算了,而 join on 默认是整个关系模型都参与计算了。

最新文章

  1. Principles of measurement of sound intensity
  2. ssh通道技术
  3. ED/EP系列2《文件结构》
  4. 英语之idiom
  5. 理解Java机制最受欢迎的8幅图
  6. quick-cocos2d-x游戏开发【6】——制作您自己的自定义效果button菜单
  7. 第11章 使用PHP从Web访问MySQL数据库
  8. Linux知识要点大全(第一章)
  9. .net core 添加 Swagger
  10. C# Winfom 中ListBox的简单用法
  11. Windows下的包管理工具-Scoop
  12. python做数据分析pandas库介绍之DataFrame基本操作
  13. putty配色备份
  14. [日常] Redis基本使用测试
  15. ECharts 柱状图顶部显示百分比
  16. HTML5 学习笔记 | LOADING...
  17. 角摩网发布在线制作Epub、Mobi格式的电子书
  18. ceph 对接openstack liberty
  19. java中的3大特性之多态
  20. tcl之控制流-for

热门文章

  1. (Java实现) 过河卒
  2. Java实现 蓝桥杯VIP 算法训练 二元函数
  3. Java实现 蓝桥杯VIP 算法训练 删除多余括号
  4. Java实现 洛谷 P1422 小玉家的电费
  5. arduino 的analogRead() 和analogWrite()
  6. PAT1040 Longest Symmetric String (25分) 中心扩展法+动态规划
  7. RabbitMQ系列之【启动过程中遇到问题及解决方案】
  8. @atcoder - AGC008E@ Next or Nextnext
  9. 解决GITLAB无法启动runsv no running
  10. TensorFlow从0到1之常量、变量和占位符详解(6)