JOIN的使用

JOIN 理论

MySQL 七种 JOIN 的 SQL 编写

环境搭建

# 创建部门表
CREATE TABLE tbl_dept (
id INT NOT NULL AUTO_INCREMENT,
deptName VARCHAR (30) DEFAULT NULL,
locAdd VARCHAR (40) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT chharset = utf8 ; # 创建员工表
CREATE TABLE tbl_emp (
id INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR (20) DEFAULT NULL,
deptId INT (11) DEFAULT NULL,
PRIMARY KEY (id),
KEY fk_dept_id (deptId) CONSTRAINT fk_dept_id FORREIGN KEY (deptId) REFERENCES tbl_dept (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = uttf8 ; # 插入部门信息
INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11),('HR',12),('MK',13),('MIS',14),('FD',15); # 插入员工信息
INSERT INTO tbl_emp(`name`,deptId) VALUES('z3',1),('z4',1),('z5',1),('w5',2),('w6',2),('s7',3),('s8',4),('s9',51);

1.内连接(INNER JOIN)

语句
SELECT * FROM tbl_dept a INNER JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

理解
  • 可以理解为两个集合的交集

2.左(外)连接(LEFT JOIN)

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

理解
  • LEFT JOIN 返回左表的全部行和右表满足 ON 条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用 NULL 代替

3.右(外)连接(RIGHT JOIN)

语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

理解
  • RIGHT JOIN 返回右表的全部行和左表满足 ON 条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用 NULL 代替。

4.左表独有

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId WHERE b.deptId IS NULL;
有图有真相

理解
  • 查询左表独有的数据 (注意:左表独有,右表 key 为空)

5.右表独有

语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId WHERE a.id IS NULL;
有图有真相

理解
  • 查询右表独有的数据 (注意:右表独有,左表 key 为空)

6.全连接

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

理解
  • mysql 中不支持 FULL JOIN 进行全连接,可以用 一个左连接 UNION 一个右连接

7.左右表独有

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id=b.deptId WHERE b.deptId IS NULL
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id=b.deptId WHERE a.id IS NULL;
有图有真相

理解
  • 左右表独有 = 左表独有 + 右表独有

MySQL JOIN的使用的更多相关文章

  1. mysql join 查询图

    mysql join 查询,特别是对查两个表之间的差集,可以用table字段=null来做. 注意千万不是join on XX!=XX  ,这样出来的结果是错误的.

  2. MySQL JOIN原理

    先看一下实验的两张表: 表comments,总行数28856 表comments_for,总行数57,comments_id是有索引的,ID列为主键. 以上两张表是我们测试的基础,然后看一下索引,co ...

  3. MySQL Join算法与调优白皮书(三)

    Batched Key Access Join Index Nested-Loop Join虽好,但是通过辅助索引进行链接后需要回表,这里需要大量的随机I/O操作.若能优化随机I/O,那么就能极大的提 ...

  4. 图解mysql join

    原文:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 这个图文解释mysql join的各种技 ...

  5. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(一)

    开心一刻 我:嗨,老板娘,有冰红茶没 老板娘:有 我:多少钱一瓶 老板娘:3块 我:给我来一瓶,给,3块 老板娘:来,你的冰红茶 我:玩呐,我要冰红茶,你给我个瓶盖干哈? 老板娘:这是再来一瓶,我家卖 ...

  6. MySQL JOIN原理(转)

    先看一下实验的两张表: 表comments,总行数28856 表comments_for,总行数57,comments_id是有索引的,ID列为主键. 以上两张表是我们测试的基础,然后看一下索引,co ...

  7. mysql JOIN关键字 语法

    mysql JOIN关键字 语法 作用:用于根据两个或多个表中的列之间的关系,从这些表中查询数据.大理石量具 说明:数据库中的表可通过键将彼此联系起来.主键(Primary Key)是一个列,在这个列 ...

  8. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)

    开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:“快跑啊!!楼主来了!” 母牛说:“楼主来了关我屁事啊?” 公牛急忙说:“楼主吹牛逼呀!” 母牛大惊,拔腿就跑,边跑边问:“你是公牛你怕什么啊? ...

  9. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程

    问题背景 对于 MySQL 的 JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解(自信满满的自我认为!):如果大家不知道怎么检验,可以试着回答如下的问题 驱动表的选择 MySQ ...

  10. Python MySQL Join

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

随机推荐

  1. PHP获取文件扩展名的常用方法小结【五种方式】

    方法1:   function getExt1($filename) {    $arr = explode('.',$filename);    return array_pop($arr);; } ...

  2. 「ARC103D」 Distance Sums

    「ARC103D」 Distance Sums 传送门 水题. 首先如果让你求树上的节点 \(i\) 到其它所有节点的距离和,这是非常简单的,这就是非常常规的换根 \(\texttt{DP}\). 那 ...

  3. 3.Java入门

    一.Java帝国的诞生 一场旷日持久的战争 1.C & C++ 1972年C诞生 贴近硬件(有汇编的一些特点),运行极快,效率极高 操作系统,编译器,数据库,网络系统等 指针(能够直接操作内存 ...

  4. 【动画消消乐】HTML+CSS 自定义加载动画 061

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专 ...

  5. python正则表达式应用

    import re ab='''ms: [["", "\u7acb\u5373\u4e0b\u8f7d"], ["", "\u52 ...

  6. adb bat

    @REM 生成随机数@echo off@REM 设置延迟变量setlocal enabledelayedexpansionset min=9set max=21set /a mod=!max!-!mi ...

  7. 夏壹队——nabcd

    我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...

  8. React组件三大属性之 refs

    React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ...

  9. Redis学习——简介

    一.Redis简介 Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).hash(哈希).list(列表). ...

  10. MapReduce学习总结之简介

    执行步骤:1)准备Map处理的输入数据 2)Mapper处理 3)Shuffle 4)Reduce处理 5)结果输出 三.mapreduce核心概念: 1)split:交由MapReduce作业来处理 ...