MySQL实现7种 SQL JOINS

文章目录

  • MySQL实现7种 SQL JOINS
    • UNION 和 UNION ALL 关键字使用
    • 7种SQL JOIN 实现

UNION 和 UNION ALL 关键字使用


MySQL在实现满外连接的时候,并不能像Oracle一样直接使用FULL OUTER JOIN,因此需要使用 UNIONUNION ALL 两个关键字,UNIONUNION ALL 使用语法如下

SELECT column, .... from table1
UNION [ALL]
SELECT column, .... from table2

UNION操作符

UNION 操作符返回两个查询的结果集的并集,去除重复记录。


UNION ALL操作符

UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。

7种SQL JOIN 实现


数据库在进行多表查询的时候,应该会有以下七种JOIN情况如下图所示

MySQL具体实现案例如下

创建一张员工表和一张部门表,表结构如图

员工表

部门表

实现连接的SQL

## 中图 内连接
SELECT employee_id,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id## 左上图 左外连接
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id# 右上图 右外连接
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id## 左中图
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_id IS NULL## 右中图
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL## 左下图: 满外连接
# 方式1: 左上图 UNION ALL 右中图
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL# 方式2: 左中图 UNION ALL 右上图
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_id IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id# 方式3 左上图 UNION 右上图 (不推荐使用 UNION,效率低)
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
UNION
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id## 右下图 左中图 UNION ALL 右中图
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_id IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL

MySQL实现7种 SQL JOINS相关推荐

  1. MySQL:七种 SQL JOINS 的实现(图文详解)

    MySQL:7种SQL JOINS的实现 前言 一.图示表示 二.代码举例 1.INNER JOIN(内连接) 2.LEFT JOIN(左连接) 3.RIGHT JOIN(右连接) 4.OUTER J ...

  2. 你不知道的 ,MySQL中的七种SQL JOINS的实现,满外连接

    七种SQL JOINS的实现,满外连接 每博一文案 英国作家摩姆说过,我们每个人在世界上都是孤独的,因此 我们只能孤独地行走,尽管身体相互依傍,却并不在一起. 既不了解别的人,也不能为别人所了解. 当 ...

  3. SQL 7种SQL JOINS的实现

    以下介绍皆为SQL语言 99语法 mysql 7种SQL JOINS 包括: departments  表 (注意看都有那些列) employees  表(注意都有那些列) 1.内连接: 内连接是通过 ...

  4. Mysql常规27种sql查询语句

    Mysql常规27种sql查询语句 话不多说,直接上干货 1.查询部分列 select 列名 from 表名 例:员工表中查询员工编号.名字.邮箱 select employee_id,employe ...

  5. 7种SQL JOINS 的实现

    Table A设置如下: Table B设置如下: 在Table A和Table B的基础上实现MySQL的七种JOINS # 7种 Sql JOIN的实现# 1.中图 : 内连接 SELECT em ...

  6. MySQL:8种SQL典型错误用法,值得收藏!

    1.LIMIT语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引. ...

  7. Mysql常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  8. MySQL 常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及 ...

  9. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

最新文章

  1. 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
  2. 运用El表达式截取字符串/获取list的长度
  3. Spring Cloud Eureka 入门 (二)服务提供者详解
  4. Python | 使用__del __()和__init __()实现析构函数和构造函数的示例
  5. 红魔1android版本能升到多少,红魔5G:实力全开,比快更快
  6. Linux网络协议栈:一个TCP链接的耗时
  7. 多项logistic回归系数解释_因变量无序多分类资料的logistic回归
  8. Flex 4中组件背景设置(填充方式)group为例子
  9. 计算机网络知识大总结,包含各种熟悉得不能再熟悉的术语解析
  10. Codeforces Round #215 (Div. 2) B. Sereja and Suffixes map
  11. 使用匿名内部类排序对象
  12. pdf怎么设置密码?
  13. 去除pdf文件的许可口令(密码)
  14. 《Cinema 4D + After Effects动态图形设计案例解析》——第 1 章 动态图形设计概述 1.1 什么是动态图形...
  15. 一般人看不透!沉默的大多数用户才是产品发展的关键!
  16. 阿里资深技术专家带你聊一聊——服务端的接口测试...
  17. 2021-11-3 软件模拟IIC时序,并和EEPROM存储芯片24C02双向通信以及显示功能
  18. 期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告
  19. pentaho使用步骤简介
  20. SAP中导出电子表格问题处理案例

热门文章

  1. 如何进行APP抓包 ? - 学习/实践
  2. Java毕设项目二次元文化网站(java+VUE+Mybatis+Maven+Mysql)
  3. Nginx 之实现原理
  4. 《数据结构与算法》(十九)- 多路查找树
  5. 校园网免认证上网的方法
  6. 第三方yum源rpmforge
  7. InDesign 教程如何更改字体和字体大小?
  8. windows c++ 错误汇总
  9. 梅特勒电子天平维修触摸屏维修XS205
  10. STM32的推挽输出和开漏输出