MySql连接查询与联合查询
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:查询单身男女的姓名,这个就留给大家自己做吧
UNION
与 UNION ALL
的区别:联合查询支持UNION
与 UNION ALL
两种用法,其中UNION
会把多个查询语句的结果合并后去重,UNION ALL
会把所有的查询结果合并,包括重复的数据。
MySql连接查询与联合查询相关推荐
- mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...
1.高级查询 (1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序 ...
- MySQL数据高级查询之连接查询、联合查询、子查询
2019独角兽企业重金招聘Python工程师标准>>> 一.连接查询 连接查询: 将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接). 连接查询的意义: 在用户 ...
- mysql子查询日期比较_数据分析系列 16/32 | MySQL中子查询与联合查询
前面说了很多MySQL中的查询,比如条件查询.分组聚合查询.连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询. PART01 子查询 子查询也称嵌套查询,是将一个查询语句 ...
- mysql DML操作、关联查询、联合查询、聚合函数使用
目录 DML操作 关联查询.联合查询 按条件查询.聚合函数使用 DML操作 CREATE DATABASE db2USE db2; CREATE TABLE stu(sid INT PRIMARY K ...
- mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询
前面说了很多MySQL中的查询,比如条件查询.分组聚合查询.连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询. PART 01 子查询 子查询也称嵌套查询,是将一个查询语 ...
- mysql 联合查询后排序_MySQL的查询(联合查询,查询排序,正则表达式)
MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询 联合查询实例 -- 联合查询 SELECT * FROM user union ...
- mysql的多表联合查询
mysql的多表联合查询 文章目录 mysql的多表联合查询 创建环境 什么是多表联合查询 交叉连接(CROSS JOIN) 笛卡尔积 交叉连接 内连接 外连接 左连接 右连接 分组查询 GROUP ...
- MySQL~聚合查询与联合查询(多表查询、复合查询)
目录 聚合查询 聚合函数 GROUP BY子句 HAVING 联合查询 内连接 外连接 自连接 子查询 单行子查询 多行子查询 合并查询 聚合查询 聚合函数 首先创建一个学生表,用来演示聚合函数的作用 ...
- 【数据库】聚合查询和联合查询
查询 1.聚合查询 1.1 聚合函数 1.2 GROUP BY子句 1.3 HAVING 2.联合查询 2.1 内连接 2.2 外连接 2.3 自连接 2.4 子查询 2.4.1 单行子查询 2.4. ...
- mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...
MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...
最新文章
- OpenJDK将对Android开发产生怎样的影响?
- html input submit 执行,HtmlInputSubmit 服务器控件声明性语法
- C++实现顺序栈的基本功能
- JavaScript实现求最大公约数 (GCD)的算法(附完整源码)
- 工业级光纤收发器九大技术优势介绍
- 真的,没人能逃开“真香定律”
- Dynamics CRM2013 6.1.1.1143版本号插件注冊器的一个bug
- 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
- 什么是http服务器
- 纺织服装外贸行业解决方案丨汇信外贸软件
- Rasa NLU 实践
- 本科三本的计算机博士,读书中的我 从三本本科到985博士
- 计算机卡驱动版本过低,显卡驱动版本过低怎么办?
- linux_SIGCHLD信号-子进程回收
- SSM——SpringMVC
- 【眼镜片】绿膜和蓝膜有什么区别?
- 大数据的特点:5个V
- 远控软件gh0st源码免杀之我谈
- 一分钟快速搭建Windows防污染DNS服务器——Pcap_DNSProxy
- ASEMI代理英飞凌SPW47N60C3功率MOS管的性能与应用
热门文章
- 如何快速掌握一门新技术/语言/框架…
- SSM实现个人博客-day03
- spring boot记录操作日志
- PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案
- TensorFlow——在web.py、Django环境下TensorFlow(Keras、tf.keras)加载和使用多模型失败解决方案
- Minimum Triangulation
- firefox+android+平板,Firefox模拟手机浏览器(iOS+Android) – UserAgent Switcher使用方法...
- 计算机网络(谢希仁第八版)第一章:概述
- 安装flume1.5
- Spring-学习笔记09【JdbcTemplate的基本使用】