按:SQL术语Join在中文对应的翻译是“连接”还是“联结”说法不一,下文将统一采用“连接”的译法。

开局一张图:

前奏/准备工作:

Emp表结构:

create table emp(
empid number(4,0),
empname nvarchar2(20),
deptno number(4,0)
)

Emp充值语句:

insert into emp(empid,empname,deptno) values('','Andy','');
insert into emp(empid,empname,deptno) values('','Bill','');
insert into emp(empid,empname,deptno) values('','Cindy','');
insert into emp(empid,empname,deptno) values('','Douglas','');
insert into emp(empid,empname,deptno) values('','张三','');
insert into emp(empid,empname,deptno) values('','李四','');
insert into emp(empid,empname,deptno) values('','王五','');

Dept表结构:

create table dept(
deptid number(4,0),
deptname nvarchar2(20)
)

Dept充值语句:

insert into dept(deptid,deptname) values('','研发');
insert into dept(deptid,deptname) values('','销售');
insert into dept(deptid,deptname) values('','市场');
insert into dept(deptid,deptname) values('','管理');
insert into dept(deptid,deptname) values('','公关');
insert into dept(deptid,deptname) values('','咨询');

正文:

内连接 :

SQL语句:

select emp.*,dept.* from emp inner join dept on emp.deptno=dept.deptid

查询结果:

SQL> select emp.*,dept.* from emp inner join dept on emp.deptno=dept.deptid;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
2 Bill 1 1 研发
4 Douglas 2 2 销售
3 Cindy 2 2 销售
5 张三 4 4 管理 已用时间: 00: 00: 00.01

左连接:

SQL语句:

select emp.*,dept.* from emp left join dept on emp.deptno=dept.deptid

查询结果:

SQL> select emp.*,dept.* from emp left join dept on emp.deptno=dept.deptid;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
2 Bill 1 1 研发
4 Douglas 2 2 销售
3 Cindy 2 2 销售
5 张三 4 4 管理
6 李四 6
7 王五 7 已选择6行。 已用时间: 00: 00: 00.00

右连接:

SQL:

select emp.*,dept.* from emp right join dept on emp.deptno=dept.deptid

查询结果:

SQL> select emp.*,dept.* from emp right join dept on emp.deptno=dept.deptid;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
2 Bill 1 1 研发
3 Cindy 2 2 销售
4 Douglas 2 2 销售
5 张三 4 4 管理
5 公关
8 咨询
3 市场 已选择7行。 已用时间: 00: 00: 00.01

左连接去除内连

SQL:

select emp.*,dept.* from emp left join dept on emp.deptno=dept.deptid where dept.deptid IS NULL

查询结果:

SQL> select emp.*,dept.* from emp left join dept on emp.deptno=dept.deptid where dept.deptid IS NULL;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
6 李四 6
7 王五 7 已用时间: 00: 00: 00.00

右连接去除内连

SQL:

select emp.*,dept.* from emp right join dept on emp.deptno=dept.deptid where emp.deptno IS NULL

查询结果:

SQL> select emp.*,dept.* from emp right join dept on emp.deptno=dept.deptid where emp.deptno IS NULL;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
5 公关
8 咨询
3 市场 已用时间: 00: 00: 00.01

全连接

SQL:

select emp.*,dept.* from emp full join dept on emp.deptno=dept.deptid 

查询结果:

SQL> select emp.*,dept.* from emp full join dept on emp.deptno=dept.deptid ;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
2 Bill 1 1 研发
4 Douglas 2 2 销售
3 Cindy 2 2 销售
3 市场
5 张三 4 4 管理
5 公关
8 咨询
6 李四 6
7 王五 7 已选择9行。 已用时间: 00: 00: 00.01

全连接去除内连接,这种查询适合比较两个结果集的差异,具体请见https://www.cnblogs.com/xiandedanteng/p/12239597.html

SQL:

select emp.*,dept.* from emp full join dept on emp.deptno=dept.deptid where emp.deptno IS NULL or dept.deptid IS NULL

查询结果:

SQL> select emp.*,dept.* from emp full join dept on emp.deptno=dept.deptid where emp.deptno IS NULL or dept.deptid IS NULL;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
3 市场
5 公关
8 咨询
6 李四 6
7 王五 7 已用时间: 00: 00: 00.00

全外连接去除内连接

SQL:

select emp.*,dept.* from emp full outer join dept on emp.deptno=dept.deptid where emp.deptno IS NULL or dept.deptid IS NULL

查询结果:

SQL> select emp.*,dept.* from emp full outer join dept on emp.deptno=dept.deptid where emp.deptno IS NULL or dept.deptid IS NULL;

     EMPID EMPNAME                                      DEPTNO     DEPTID DEPTNAME
---------- ---------------------------------------- ---------- ---------- ----------------------------------------
3 市场
5 公关
8 咨询
6 李四 6
7 王五 7 已用时间: 00: 00: 00.00

IN半连接:

SQL:

select emp.* from emp where emp.deptno in (select deptid from dept)

查询结果:

SQL> select emp.* from emp where emp.deptno in (select deptid from dept);

     EMPID EMPNAME                                      DEPTNO
---------- ---------------------------------------- ----------
2 Bill 1
4 Douglas 2
3 Cindy 2
5 张三 4 已用时间: 00: 00: 00.00

EXISTS半连接:

SQL:

select emp.* from emp where exists  (select NULL from dept where dept.deptid=emp.deptno)

查询结果:

SQL> select emp.* from emp where exists  (select NULL from dept where dept.deptid=emp.deptno);

     EMPID EMPNAME                                      DEPTNO
---------- ---------------------------------------- ----------
2 Bill 1
4 Douglas 2
3 Cindy 2
5 张三 4 已用时间: 00: 00: 00.01

IN反连接:

SQL:

select emp.* from emp where emp.deptno not in (select deptid from dept)

查询结果:

SQL> select emp.* from emp where emp.deptno not in (select deptid from dept);

     EMPID EMPNAME                                      DEPTNO
---------- ---------------------------------------- ----------
6 李四 6
7 王五 7 已用时间: 00: 00: 00.00

EXISTS反连接:

SQL:

select emp.* from emp where not exists  (select NULL from dept where dept.deptid=emp.deptno)

查询结果:

SQL> select emp.* from emp where not exists  (select NULL from dept where dept.deptid=emp.deptno);

     EMPID EMPNAME                                      DEPTNO
---------- ---------------------------------------- ----------
6 李四 6
7 王五 7 已用时间: 00: 00: 00.00

参考网页:https://docs.oracle.com/cd/E11882_01/server.112/e41084/queries006.htm#SQLRF30046

实验环境:

# 类别 版本
1 操作系统 Win10
2 数据库 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
3 硬件环境 T440p
4 内存 8G

--2020年2月6日--

两表连接各种Join图示,SQL及查询结果的更多相关文章

  1. 9、SQL基础整理(两表连接exists,join on,union)

    exists的用法 select *from haha where exists (select *from bumen where bumen.code = haha.bumen and bumen ...

  2. sql表连接left join,right join,inner join三者之间的区别

    sql表连接left join,right join,inner join区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 (以左表数据为基准,不足补为NULL) ...

  3. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  4. oracle 表连接 - hash join 哈希连接

    一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...

  5. hibernate两表连接查询

    1.两表的关联关系为一对一 2.库存表Stock与商品信息表Product 3.库存表查询商品表里的商品名称,商品编号 库存表字段:    private String id;    private ...

  6. SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)

    --exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...

  7. sql两表连接

    一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表大小相当,那么用in和exists差别不大.如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例 ...

  8. 从两表连接看Oracle sql优化器的效果

    select emp.*,dept.* from tb_emp03 emp,tb_dept03 dept where emp.deptno=dept.id -- 不加hint SQL> sele ...

  9. c# DataTable join 两表连接

    转:https://www.cnblogs.com/xuxiaona/p/4000344.html JlrInfodt和dtsource是两个datatable,通过[姓名]和[lqry]进行关联 v ...

随机推荐

  1. 制作的excel表格如何放到微信公众号文章中?

    制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...

  2. C# ASP JS引用路径不正确导致的错误

    假设JS包放在根目录下的Scripts文件夹下 当前页的路径在另一个文件夹下,那么他引用JS应该:<script src="../Scripts/jquery-1.4.1.min.js ...

  3. 5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆

    摘要:2020年7月9日,ITU正式把NB-IoT纳入5G标准体系! 高速率.低时延与5G是青梅竹马的关系,在大容量的选择上,5G与NB-IoT不断传出着绯闻,终于:2020年7月9日,ITU正式把N ...

  4. 搭建Elasticsearch Logstash Kibana 日志系统

    分布式系统下由于日志文件分布在不同的系统上,分析比较麻烦,通过搭建elk日志系统,可快速排查日志信息. Elasticsearch是大数据处理框架,使用的分布式存储,可存储海量数据:基于Lucense ...

  5. 【CQOI2018】异或序列 - 莫队

    题目描述 已知一个长度为n的整数数列 $a_1,a_2,...,a_n$​,给定查询参数l.r,问在 $a_l,a_{l+1},...,a_r$​ 区间内,有多少子序列满足异或和等于k.也就是说,对于 ...

  6. [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本

    写在前面 很多neter都有在用Ocelot做Api网关,但是Ocelot又不像kong或者其他网关一样,开箱即用.它需要你单独开一个web项目来部署,这样很多同学都在做重复的事了. 这里[Hei.O ...

  7. MySQL最全存储引擎、索引使用及SQL优化的实践

    1 MySQL的体系结构概述 整个MySQL Server由以下组成 :Connection Pool :连接池组件Management Services & Utilities :管理服务和 ...

  8. cinder migrate基础内容-1

    一.卷迁移rest api接口 POST /v2/{project_id}/volumes/{volume_id}/action 迁移一个卷到特定的主机,在请求体中指定 os-migrate_volu ...

  9. Fairseq-快速可扩展的序列建模工具包

    一种快速.可扩展的序列建模工具包,Pytorch的高级封装库,适用于机器翻译.语言模型和篇章总结等建模任务. 抽象 Dataset:数据加载 Fairseq中的Dataset基本都是按功能逐层封装,按 ...

  10. 算法-搜索(3)AVL树

    AVL树高度平衡的二叉搜索树,任一点的平衡印章只能是+1.-1.0,从而尽量降低树的高度. 如果它有n个结点,高度可保持在O(log2n),平均搜索长度也可保持在O(log2n). (1)AVL树的插 ...