MySQL修炼之联结与集合浅析


Posted in MySQL onOctober 05, 2021

联结查询

联结查询就是指两张或者以上的表之间进行匹配查询,一般称之为水平操作,就是最终结果会包含这几个表中所有的列,MySQL中有三种联结操作,交叉联结、内联结、外联结。

交叉联结叫做CROSS JOIN,他对两个表执行笛卡儿积,他将返回两个表中所有列的组成,比如左表中有n条数据,右表中有m条数据,那么最终结果就是n*m条,但是也可以自己与自己联结,那么最终结果就是n*n条,比如下面语句。

select * from orders as a  cross join orders as b;
+---------+--------+---------+--------+
| orderId | userId | orderId | userId |
+---------+--------+---------+--------+
|   10007 |      2 |   10001 |      1 |
|   10006 |      4 |   10001 |      1 |
.....
|   10002 |      1 |   10007 |      2 |
|   10001 |      1 |   10007 |      2 |
+---------+--------+---------+--------+

49 rows in set (0.01 sec)

由于orders表中有7条数据,那么最后将生成49条数据,还有一种写法是下面这样的。

mysql> select * from orders as a  ,orders as b;

他们的结果都相同,只是写法不同,上面的写法是在1989年,美国国家标准学会对SQL进行的规范,称之为ANSI SQL 89标准,而第一种写法是92年规定的。

交叉联结有个用处就是快速生成重复数据,比如下面语句。

insert orders select a.orderId,a.userId from orders as a ,orders as b limit 10;

下面就是内联结,分为两部,首先产生笛卡儿积,然后在根据后面ON的过滤条件来过滤,他产生两个表中具有相同记录的值。

MySQL修炼之联结与集合浅析

在ON后面除了等于运算符 (=) 之外,还可以使用其他运算符,例如大于 ( >)、小于 ( <) 和不等于 ( <>) 运算符来构成连接条件。

最后一个是OUTER JOIN,可以按照一些过滤条件来匹配表之间的数据,与INNER JOIN不同的是,在通过OUTER JOIN添加的保留表中存在未找到的匹配数据,MySQL支持LEFT OUTER JOIN、RIGHT OUTER JOIN,写的时候可以省略OUTER 。

下面是LEFT JOIN所示图,LEFT JOIN返回左表 (table1) 中的所有记录,以及右表 (table2) 中的匹配记录。

MySQL修炼之联结与集合浅析

下面是RIGHT  JOIN所示图,RIGHT JOIN返回右表 (table2) 中的所有记录,以及左表 (table1) 中的匹配记录。

MySQL修炼之联结与集合浅析

集合操作

MySQL中有个UNION运算符,用于组合2个或多个SELECT结果集,并删除SELECT语句之间的重复行,使用他时候要遵循以下基本规则:

  • 所有SELECT语句中出现的列数和顺序 必须相同。
  • 列也必须具有相同的数据类型。

如现在有以下表

CREATE TABLE t1 (
    id INT PRIMARY KEY
);

CREATE TABLE t2 (
    id INT PRIMARY KEY
);

INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);

执行以下SQL

SELECT id FROM t1
UNION
SELECT id FROM t2;

最终结果是这样的。

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

UNION语句默认会从结果行集中删除重复的数据,但是,可以使用UNION ALL获取重复记录。

SELECT id FROM t1
UNION ALL 
SELECT id FROM t2;

结果如下

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  2 |
|  3 |
|  4 |
+----+
6 rows in set (0.00 sec)

UNION 和 JOIN 之间的基本区别在于 UNION 水平组合结果集,而 JOIN 语句垂直组合结果集。

MySQL修炼之联结与集合浅析

总结

到此这篇关于MySQL联结与集合的文章就介绍到这了,更多相关MySQL联结与集合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
详解MySQL的半同步
Apr 22 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
MySql开发之自动同步表结构
May 28 MySQL
浅谈mysql增加索引不生效的几种情况
Jun 23 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 MySQL
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
MySQL修改默认引擎和字符集详情
Sep 25 #MySQL
You might like
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
IE8 原生JSON支持
2009/04/13 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript面向对象精要(下部)
2017/09/12 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python中将字典转换为列表的方法
2016/09/21 Python
Python之用户输入的实例
2018/06/22 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
对Python _取log的几种方式小结
2019/07/25 Python
Django设置Postgresql的操作
2020/05/14 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
教师群众路线剖析材料
2014/09/29 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
复试通知单模板
2015/04/24 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
Redis 异步机制
2022/05/15 Redis