SQL中JOIN和UNION

2023-11-04

join 是两张表做交连后里面条件相同的部分记录(可以是不同字段)产生一个记录集, 

union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。 

JOIN用于按照ON条件联接两个表,主要有四种: 
INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。
LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。
RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。
FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。

JOIN的基本语法:
Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id

UNION运算符
将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。
其中两种不同的用法是UNION和UNION ALL,区别在于UNION从结果集中删除重复的行。如果使用UNION ALL 将包含所有行并且将不删除重复的行。

具体用法:

1.
a. 并集UNION
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2

b. 交集JOIN
SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name

c. 差集NOT IN
SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2)

d. 笛卡尔积
SELECT * FROM table1 CROSS JOIN table2

SELECT * FROM table1,table2相同


2. SQL中的UNION
UNION与UNION ALL的区别是,前者会去除重复的条目,后者会仍旧保留。

a. UNION
SQL Statement1
UNION
SQL Statement2

b. UNION ALL
SQL Statement1
UNION ALL
SQL Statement2

3. SQL中的各种JOIN
SQL中的连接可以分为内连接,外连接,以及交叉连接

(即是笛卡尔积) 

a. 交叉连接CROSS JOIN
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积 ,返回结果的行数等于两个表行数的乘积;

举例
SELECT * FROM table1 CROSS JOIN table2
等同于
SELECT * FROM table1,table2

一般不建议使用该方法,因为如果有WHERE子句的话 ,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条 件从中选择。 
因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。

b. 内连接INNER JOIN
如果仅仅使用
SELECT * FROM table1 INNER JOIN table2
没有指定连接条件的话,和交叉连接的结果一样。

但是通常情况下,使用INNER JOIN需要指定连接条件。
-- 等值连接(=号应用于连接条件, 不会去除重复的列)
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
-- 不等连接(>,>=,<,<=,!>,!<,<>)
例如
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column
-- 自然连接(会去除重复的列)


c. 外连接OUTER JOIN
首先内连接和外连接的不同之处: 
内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样 ,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数 乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。

指定条件的内连接,仅仅返回符合连接条件的条目。
外连接则不同,返回的结果不仅包含符合连接条件的行 ,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。

1)左外连接LEFT [OUTER] JOIN 
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行 ,右边没有对应的条目显示NULL
例如
SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column
2)右外连接RIGHT [OUTER] JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行 ,左边没有对应的条目显示NULL
例如
SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column
3)全外连接
显示符合条件的数据行,同时显示左右不符合条件的数据行 ,相应的左右两边显示NULL
http://blog.csdn.net/jack_rao/article/details/3727081


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL中JOIN和UNION 的相关文章

  • Spring基础知识讲解

    文章目录 Spring是什么 IoC容器与DI DI与IoC的区别 Spring项目的创建 配置maven国内源 创建Spring项目 有关Bean的操作 存储Bean 使用Bean ApplicationContext和BeanFacto
  • mmsegmentation中可视化

    目录 1 tools train py tools dist train sh 2 tools test py 指定输出到 pkl 文件 3 分析日志 绘制分类损失 日志分析 4 Flops Params fps的实现 fps的实现 too

随机推荐

  • 关于实现类按多属性排序的问题(compareTo()函数应用)

    class tongji char zi 字符 int num 出现次数 如上这个类 按照统计个数由多到少输出统计结果 如果统计的个数相同 则按照ASII码由小到大排序输出 1 num大的靠前 2 num 相同情况下 判断字符的ASII码
  • kafka总结概述

    kafka概述 消息中间件对比 特性 ActiveMQ RabbitMQ RocketMQ Kafka 开发语言 java erlang java scala 单机吞吐量 万级 万级 10万级 100万级 时效性 ms us ms ms级以
  • 谷歌开源芯片 180 纳米制造工艺

    谷歌一直在开源芯片方面发力 从跟 SkyWater Technology 的合作开始 SkyWater 为谷歌的开源芯片计划提供了 130nm 工艺的芯片设计 随后把工艺推进到 90nm 制造 为该开源芯片计划加了不少含金量 谷歌与Glob
  • leetcode 347:前K个高频词

    使用python的dict存储 value记录数量 再排序 最后输出 class Solution object def topKFrequent self nums k type nums List int type k int rtyp
  • ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法

    当遇到ORA 12505 TNS 监听程序当前无法识别连接描述符中所给出的SID等错误需要特别检查如下配置 1 检查数据库客户端 ORACLEHOME client 1 NETWORK ADMIN目录中的tnsnames ora文件看客户端
  • 如何自学Python爬虫? 零基础入门教程

    如何自学Python爬虫 在大家自学爬虫之前要解决两个常见的问题 一是爬虫到底是什么 二是问什么要用Python来做爬虫 爬虫其实就是自动抓取页面信息的网络机器人 至于用Python做爬虫的原因 当然还是为了方便 本文将为大家提供一份详细的
  • Docker笔记1 基础概念和镜像

    基础概念 开发环境deepin linux 15 11 安装docker之后 执行命令 sudo usermod aG docker USER NAME 让docker和当前用户在一个组中 可以每次不用执行sudo命令了 三个核心的概念 镜
  • 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)

    目录 分类 封装 焊线式 覆晶式 开关电源 三种基本的非隔离开关电源 纹波 ripple 开关电源的元件构成 有源开关 肖特基二极管或快恢复二极管 不使用普通硅二极管的原因 电感 电容 分压电阻 输出电压设置 工作原理 工作模式 连续模式
  • laya快捷键

    Ctrl F6 构建html Ctrl F7 实时编译 Ctrl F8 实时编译 F11 UI导出 不导出图集 图集不变的情况用这个会快很多
  • 分类和标注词汇(基于nltk)

    早在小学你就学过名词 动词 形容词和副词之间的差异 这些 词类 不是闲置的文法家的发明 而是对许多语言处理任务都有用的分类 正如我们将看到的 这些分类源于对文本中词的分布的简单的分析 本章的目的是要回答下列问题 什么是词汇分类 在自然语言处
  • sql-labs 闯关 5~10

    sql labs 闯关 5 10 友善爱国平等诚信民主友善公正敬业爱国友善爱国公正友善自由友善敬业爱国平等 复习笔记1 内容 盲注步骤思维导图 sql labs第五关 GET请求 双注入 单引号字符型 sql labs第六关 GET请求 双
  • Windows下Sqlmap环境安装教程详解

    更多编程教程请到 菜鸟教程 https www piaodoo com Sqlmap安装 Sqlmap gt gt 基于Python的自动化渗透测试工具 安装工具前需要进行Python的环境准备 Python环境的安装 1 1 下载与安装
  • 软件安全测试包含哪些内容和方法?安全测试报告的必要性

    软件安全测试是一种通过模拟真实攻击的方式 对软件系统进行全面的安全性评估和测试 以发现潜在的安全漏洞和弱点 是确保软件系统安全性的重要措施 在进行软件安全测试时 我们需要了解测试的内容和方法 以及为什么进行安全测试报告的必要性 一 软件安全
  • 2021-05-24

    JDBC 目录 JDBC 一 idea下创建JDBC项目 1 下载所需JDBC驱动 2 连接数据库 3 创建JDBC项目 二 JDBC常用类及常用方法介绍 1 DrivaerManger 驱动管理对象 2 Connection 数据库连接对
  • Chat GPT Access denied——最新解决方法

    前几天没怎么捣鼓ChatGpt 看到网上铺天盖地的被封号的消息 心想我不会也被封了吧 立马上线一探究竟 结果喜提Access denied 难道我要告别Chatgpt了 不 我不甘心 然后就是一顿操作根据网上各路大神帖子提供的方案 都一一失
  • Nginx参数配置详细说明【全局、http块、server块、events块】【已亲测】

    Nginx重点参数配置说明 本文包含Nginx参数配置说明全局块 http块 server块 events块共计30多个参数配置与解释 其中常见参数包含配置错误出现的错误日志 能让你更快的解决问题 该文的所有参数大部分经过单独测试 错误都是
  • Vue修改数据页面不更新的问题解决

    第一种场景 动态给对象新增属性或者删除属性是不会触发视图刷新的 Vue识别不到 第二种场景 通过数组下标修改数组中的元素或者手动修改数组的长度 Vue识别不到 解决方法1 静默刷新 使用v if的特性 在修改值之后将元素销毁 然后在修改后的
  • Java GUI编程(Swing)(窗口 面板 弹窗)

    目录 一 窗口 面板 Swing 重点 重点 重点 如果想给窗口进行背景颜色 必须要给窗口JFrame实例化 否则其他没有颜色 例如 jframe setBackground Color BLUE 背景无颜色 Container conta
  • Minio 部署

    minio 官网 https www minio org cn 部署文档 https www minio org cn docs minio container operations install deploy manage deploy
  • SQL中JOIN和UNION

    join 是两张表做交连后里面条件相同的部分记录 可以是不同字段 产生一个记录集 union是产生的两个记录集 字段要一样的 并在一起 成为一个新的记录集 JOIN用于按照ON条件联接两个表 主要有四种 INNER JOIN 内部联接两个表