技术标签: 数据库
目录
五、LEFT JOIN EXCLUDING INNER JOIN
六、RIGHT JOIN EXCLUDING INNER JOIN
七、FULL OUTER JOIN EXCLUDING INNER JOIN
JOIN是我们这些整天与数据打交道的人绕不开的一个词,不管是在传统的关系型数据库,还是在大数据领域的数据仓库/数据湖中,JOIN都是常客。特别是对于OLAP业务而言,几乎每个查询都需要用JOIN来建立表之间的关系,地位非常之重要。本文就来简单讲解一些主要的join种类和含义。
drop table left_table
create table left_table(id int, name varchar(20))
insert into left_table values(1, 'Dog')
insert into left_table values(2, 'Cat')
insert into left_table values(3, 'Pig')
insert into left_table values(null,null)
drop table right_table
create table right_table(id int, name varchar(20))
insert into right_table values(1, 'Squirrel')
insert into right_table values(2, 'Rabbit')
insert into right_table values(4, 'Whale')
insert into right_table values(null,null)
左表的数据
右表的数据
SQL语义:
INNER JOIN 一般被译作内连接。内连接查询能将左表(表 A)和右表(表 B)中能关联起来的数据连接后返回。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
INNER JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
Oracle计划示意图:
结果显示如下图:
SQL语义:
LEFT JOIN 一般被译作左连接,也写作 LEFT OUTER JOIN。左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
LEFT JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
Oracle计划示意图:
结果显示如下图:
SQL语义:
RIGHT JOIN 一般被译作右连接,也写作 RIGHT OUTER JOIN。右连接查询会返回右表(表 B)中所有记录,不管左表(表 A)中有没有关联的数据。在左表中找到的关联数据列也会被一起返回。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
RIGHT JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
Oracle计划示意图:
结果显示如下图:
SQL语义:
Full Join又叫FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOIN 或 FULL JOIN。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
FULL JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
Oracle计划示意图:
结果显示如下图:
SQL语义:
返回左表有但右表没有关联数据的记录集。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
LEFT JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
WHERE
T2.ID IS NULL
Oracle计划示意图:
结果显示如下图:
SQL语义:
返回右表有但左表没有关联数据的记录集。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
RIGHT JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
WHERE
T1.ID IS NULL
Oracle计划示意图:
结果显示如下图:
SQL语义:
返回左表和右表里没有相互关联的记录集。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
FULL JOIN RIGHT_TABLE T2 ON T1.ID = T2.ID
WHERE
T1.ID IS NULL OR T2.ID IS NULL
Oracle计划示意图:
结果显示如下图:
SQL语义:
返回左表与右表之间符合条件的记录的迪卡尔集。
示意图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
CROSS JOIN RIGHT_TABLE T2
Oracle计划示意图:
结果显示如下图:
SQL语义:
左表中的一行数据,在右表中只要找到1次就直接返回输出。不继续往后对比。节省开销。通常使用IN 或 EXISTS 作为连接条件。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
WHERE
T1.ID IN (
SELECT
T2.ID
FROM
RIGHT_TABLE T2
WHERE
T1.ID = T2.ID)
Oracle计划示意图:
结果显示如下图:
SQL语义:
左表中的一行数据,在右表中没有找到匹配列,则输出。
文氏图:
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
WHERE
NOT EXISTS (
SELECT
T2.ID
FROM
RIGHT_TABLE T2
WHERE
T1.ID = T2.ID)
Oracle计划示意图:
结果显示如下图:
SQL语义:
倘若子查询返回一条null值,则整个not in都变为false,即不返回任何值。
SQL示意:
SELECT
*
FROM
LEFT_TABLE T1
WHERE
T1.ID NOT IN ( SELECT T2.ID FROM RIGHT_TABLE T2 )
Oracle计划示意图:
结果显示如下图:
以上用法基本上可以覆盖各种 JOIN 查询了。顺带张贴一下 C.L. Moffatt 带 SQL 语句的图片,配合学习。
Join是数据库非常重要的核心技术,作为数据库研发工作者或者数据库使用者,了解Join和学习Join还是有一定好处的。后续文章会提如何让优化器选择更好的Join。让数据库的计算引擎能更快的计算结果。还有Join的三种实现算法例如(Nested Loop Join, Hash Join, Sort Merge Join)。
文章浏览阅读313次。数组模拟环形队列的思路及代码实现思路如下:1、front 变量的含义做一个调整: front 就指向队列的第-个元素也就是说arrfront]就是队列的第一个元素front的初始值= 02、 rear变量的含义做- -个调整: rear 指向队列的最后- -个元素的后- -个位置。因为希望空出一-个空间做为约定.rear的初始值=03、当队列满时,条件是(rear + 1) % maxSize front [满]4、对队列为空的条件,rear== front空5、当我们这样分析,队列中有效的数据_实现环形队列的各种基本运算的算法思路
文章浏览阅读3.1k次。搜狗输入法中文文标点切换概述写代码时需要使用英文标点符号, 稍不注意使用中文标点就会报错,并且在写页面时又需要使用中午标点符号,总是来回切换挺费劲,可以通过全半角的方式让搜狗输入法自动完成切换配置方式第一步:第二步:..._搜狗输入法标点符号改中文
文章浏览阅读3.6k次,点赞23次,收藏81次。redis狂神说笔记/阿里云服务器连接一.安装windows安装linux安装1.官网地址:https://redis.io/download2.下载Xshell,Xftp免费版3.链接阿里云服务器4.安装Xftp,连接阿里云服务器5.![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330172112103.png)6.文件上传到服务器,利用Xftp7.解压安装包8.进入解压后文件9.基本环境安装二.测试性能三.基础知识redis是单线程的redis-key四.五_狂神redis笔记
文章浏览阅读1.8k次,点赞3次,收藏19次。点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!作为二本上岸大厂的后端应届生,深知没人带一路摸索的艰辛,想把自己的心路历程与经验心得收获分享给大家。后期大厂..._sql执行慢如何优化
文章浏览阅读1.4k次。概述从 Java 程序内调用本机代码破坏了 Java 程序的可移植性和安全性。尽管已编译的 Java 字节码保持了很好的可移植性,但必须为您打算用来运行该应用程序的每个平台重新编译本机代码。另外,由于本机代码在 JVM 之外执行,所以约束它的安全性协议不必和 Java 代码的相同。从本机程序调用 Java 代码也很复杂。因为 Java 语言是面向对象的,所以从本机应用程序调用 Ja_通过jni循环运行java
文章浏览阅读3.7w次,点赞72次,收藏802次。1.简介2.算法原理3.实例分析3.1 读取数据3.2原理推导K均值过程3.3 自带kmeans函数求解过程完整代码_matlabkmeans聚类算法
文章浏览阅读646次。解决方案:<![CDATA[<=]]>解析:术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在 XML 元素中,"<" 和 “&” 是非法的。“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。某些..._<=转义
文章浏览阅读2.6k次,点赞4次,收藏2次。看源码的时候,看到了新的语法,scan,break scan。下面源码摘抄于String.class的toUpperCase(Locale locale)方法/* Now check if there are any characters that need to be changed. */scan: { for (firstLower = 0 ; firstLower &..._java scan: {}
文章浏览阅读3.1k次。原文地址1. 先决条件 PrerequisitesNginx 或 Nginx Plus。一台代理服务器或一组 upstream 服务器。SSL 证书和私钥。2. 获取 SSL 的服务器证书可以从可信的证书颁发机构(certificate authority,CA)购买证书,或通过 OpenSSL 库自己创建证书。服务器证书和私钥应该被放到每一台 upstream 服..._nginx upstream ssl
文章浏览阅读560次。<>第五章,理解RemoteViews RemoteViews的应用 RemoteViews的内部机制 RemoteViews的意义应用RemoteViews字面意思是一个远程View,可以在其他进程中显示.使用场景是 通知栏和桌面小部件.通过应用的包名和布局文件的资源id即可创建RemoteViews对象,通知栏通过NotificationManager._romotevie
文章浏览阅读5.5k次,点赞4次,收藏17次。话不多说,来张效果图:实现方式是安装vue-json-viewer插件,实现步骤如下:1、安装vue-json-viewernpm install vue-json-viewer --save2、main.js引入vue-json-viewerimport JsonViewer from 'vue-json-viewer'3、利用vue-json-viewer展示Json树<template> <div class="json_box"> <!--_jsonviewer默认展开
文章浏览阅读199次,点赞2次,收藏2次。引言各位在开发的过程中肯定遇到过被接口文档折磨的经历,由于 RESTful 接口的轻量化以及低耦合性,我们在修改接口后文档更新不及时,导致接口的调用方(无论是前端还是后端)经常抱怨接口与文档不一致。程序员的特点是特别不喜欢写文档,但是又同时特别不喜欢别人不写文档。快速上手既然 Swagger2 是一个 API 文档工具,我们就在代码中看一下这个文档工具在 Spring Boot 中是如何使用的吧。(了解源码可+求求: 1791743380)2.1 引入依赖代码清单:spring-boo.._springboot使用api