PS:相关环境

测试表:

DROP TABLE IF EXISTS `boys`;
CREATE TABLE `boys` (`id` int(11) NOT NULL AUTO_INCREMENT,`boyName` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;INSERT INTO `boys` VALUES ('1', '张无忌');
INSERT INTO `boys` VALUES ('2', '令狐冲');
INSERT INTO `boys` VALUES ('3', '郭靖');
INSERT INTO `boys` VALUES ('4', '杨过');
INSERT INTO `boys` VALUES ('5', '宋青书');DROP TABLE IF EXISTS `girls`;
CREATE TABLE `girls` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`boyfriend_id` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;INSERT INTO `girls` VALUES ('1', '小龙女', '4');
INSERT INTO `girls` VALUES ('2', '赵敏', '1');
INSERT INTO `girls` VALUES ('3', '东方不败', '2');
INSERT INTO `girls` VALUES ('4', '黄蓉', '3');
INSERT INTO `girls` VALUES ('5', '郭襄', '100');

girls表中的数据:

boys表中的数据:

为了方便大家测试将表结构与表中的数据都在上面贴了出来,直接拷贝到数据库执行即可。所有的测试都通过上面 2 张表完成,大于 2 张表时原理是一样的。

一、等值连接

等值连接:查询的结果是 2 张表或多张表中“同时满足”条件的数据

主要语法:... INNER JOIN ... ON ...

示意图:

案例:查询有男朋友的女生的名字与其对应的男朋友的名字

SQL 语句(同 WHERE):

SELECTg. name,b.boyName
FROMgirls g
INNER JOIN boys b ON g.boyfriend_id = b.id;

查询结果:

二、左外连接

左外连接:也称为左连接,查询的结果是 2 张表“同时满足”条件的数据与左侧表中不符合条件的数据的结合

主要语法:... LEFT OUTER JOIN ... ON ...

示意图:

案例 1:查询有男朋友的女生的名字与对应的男朋友的名字,并查询没有男朋友的女生的名字

SQL 语句(OUTER 可以省略):

SELECTg. name,b.boyName
FROMgirls g
LEFT OUTER JOIN boys b ON g.boyfriend_id = b.id;

查询结果:

案例二:查询没有男朋友的女生的名字

SQL 语句:

SELECTg. name
FROMgirls g
LEFT JOIN boys b ON g.boyfriend_id = b.id
WHERE b.id IS NULL;

查询结果:

三、右外连接

右外连接:也称为右连接,查询的结果是 2 张表“同时满足”条件的数据与右侧表中不符合条件的数据的结合

主要语法:... RIGHT OUTER JOIN ... ON ...

示意图:

案例 1:查询有男朋友的女生的名字与对应的男朋友的名字,并查询没有女朋友的男生的名字

SQL 语句:

SELECTg. name, B.boyName
FROMgirls g
RIGHT JOIN boys b ON g.boyfriend_id = b.id;

查询结果:

案例 2:查询没有女朋友的男生的名字,这个的答案就不贴出来了,有兴趣的可以自己尝试一下

四、全外连接

全外连接:查询的结果是 2 张表“同时满足”条件的数据与左侧表和右侧表中不符合条件的数据的结合

主要语法:... FULL JOIN ... ON ...

示意图:

案例 1:查询有男朋友的女生的名字与对应的男朋友的名字,并查询没有男朋友的女生的名字与没有女朋友的男生的名字

SQL 语句:

SELECTg. name, B.boyName
FROMgirls g
FULL JOIN boys b ON g.boyfriend_id = b.id

注:MySql 并不支持全外连接,所有上面的语句在执行的时候会报错,但是在 Oracle 数据库中是支持的。关于这个案例,我们可以使用联合查询的方式来实现,会在下面讲述。

五、联合查询

联合查询:就是把多个查询语句的查询结果结合在一起

主要语法1:... UNION ...
主要语法2:... UNION ALL ...

案例 1:查询所有女生的名字与男生的名字

SQL 语句:

SELECT name FROM girls
UNION
SELECT boyName FROM boys;

查询结果:

案例 2:实现上面的全外连接

SQL 语句:

SELECTg. name,b.boyName
FROMgirls g
LEFT JOIN boys b ON g.boyfriend_id = b.id
UNION
SELECTg. name, B.boyName
FROMgirls g
RIGHT JOIN boys b ON g.boyfriend_id = b.id;

查询结果:

在实现全外连接的时候我们使用了左外连接与右外连接相结合,并且在数据结合的时候把重复的数据去除了。

案例 3:查询单身男女的姓名,这个就留给大家自己做吧

UNIONUNION ALL的区别:联合查询支持UNIONUNION ALL两种用法,其中UNION 会把多个查询语句的结果合并后去重UNION ALL会把所有的查询结果合并,包括重复的数据。

MySql连接查询与联合查询相关推荐

  1. mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...

    1.高级查询 (1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序 ...

  2. MySQL数据高级查询之连接查询、联合查询、子查询

    2019独角兽企业重金招聘Python工程师标准>>> 一.连接查询 连接查询: 将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接). 连接查询的意义: 在用户 ...

  3. mysql子查询日期比较_数据分析系列 16/32 | MySQL中子查询与联合查询

    前面说了很多MySQL中的查询,比如条件查询.分组聚合查询.连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询. PART01 子查询 子查询也称嵌套查询,是将一个查询语句 ...

  4. mysql DML操作、关联查询、联合查询、聚合函数使用

    目录 DML操作 关联查询.联合查询 按条件查询.聚合函数使用 DML操作 CREATE DATABASE db2USE db2; CREATE TABLE stu(sid INT PRIMARY K ...

  5. mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

    前面说了很多MySQL中的查询,比如条件查询.分组聚合查询.连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询. PART 01 子查询 子查询也称嵌套查询,是将一个查询语 ...

  6. mysql 联合查询后排序_MySQL的查询(联合查询,查询排序,正则表达式)

    MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询 联合查询实例 -- 联合查询 SELECT * FROM user union ...

  7. mysql的多表联合查询

    mysql的多表联合查询 文章目录 mysql的多表联合查询 创建环境 什么是多表联合查询 交叉连接(CROSS JOIN) 笛卡尔积 交叉连接 内连接 外连接 左连接 右连接 分组查询 GROUP ...

  8. MySQL~聚合查询与联合查询(多表查询、复合查询)

    目录 聚合查询 聚合函数 GROUP BY子句 HAVING 联合查询 内连接 外连接 自连接 子查询 单行子查询 多行子查询 合并查询 聚合查询 聚合函数 首先创建一个学生表,用来演示聚合函数的作用 ...

  9. 【数据库】聚合查询和联合查询

    查询 1.聚合查询 1.1 聚合函数 1.2 GROUP BY子句 1.3 HAVING 2.联合查询 2.1 内连接 2.2 外连接 2.3 自连接 2.4 子查询 2.4.1 单行子查询 2.4. ...

  10. mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...

    MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...

最新文章

  1. OpenJDK将对Android开发产生怎样的影响?
  2. html input submit 执行,HtmlInputSubmit 服务器控件声明性语法
  3. C++实现顺序栈的基本功能
  4. JavaScript实现求最大公约数 (GCD)的算法(附完整源码)
  5. 工业级光纤收发器九大技术优势介绍
  6. 真的,没人能逃开“真香定律”
  7. Dynamics CRM2013 6.1.1.1143版本号插件注冊器的一个bug
  8. 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
  9. 什么是http服务器
  10. 纺织服装外贸行业解决方案丨汇信外贸软件
  11. Rasa NLU 实践
  12. 本科三本的计算机博士,读书中的我 从三本本科到985博士
  13. 计算机卡驱动版本过低,显卡驱动版本过低怎么办?
  14. linux_SIGCHLD信号-子进程回收
  15. SSM——SpringMVC
  16. 【眼镜片】绿膜和蓝膜有什么区别?
  17. 大数据的特点:5个V
  18. 远控软件gh0st源码免杀之我谈
  19. 一分钟快速搭建Windows防污染DNS服务器——Pcap_DNSProxy
  20. ASEMI代理英飞凌SPW47N60C3功率MOS管的性能与应用

热门文章

  1. 如何快速掌握一门新技术/语言/框架…
  2. SSM实现个人博客-day03
  3. spring boot记录操作日志
  4. PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案
  5. TensorFlow——在web.py、Django环境下TensorFlow(Keras、tf.keras)加载和使用多模型失败解决方案
  6. Minimum Triangulation
  7. firefox+android+平板,Firefox模拟手机浏览器(iOS+Android) – UserAgent Switcher使用方法...
  8. 计算机网络(谢希仁第八版)第一章:概述
  9. 安装flume1.5
  10. Spring-学习笔记09【JdbcTemplate的基本使用】