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的版本
May 19 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL表类型 存储引擎 的选择
Nov 11 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 MySQL
Mysql数据库group by原理详解
Jul 07 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使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
js实现移动端轮播图
2020/12/21 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
Vue中computed及watch区别实例解析
2020/08/01 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Django中Model的使用方法教程
2018/03/07 Python
django Serializer序列化使用方法详解
2018/10/16 Python
基于python图像处理API的使用示例
2020/04/03 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
python 数据类型强制转换的总结
2021/01/25 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
2015年安全生产月活动总结
2015/03/26 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL