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 05 MySQL
mysql对于模糊查询like的一些汇总
May 09 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
浅谈MySQL函数
Oct 05 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
解析MySQL索引的作用
Mar 03 MySQL
MySQL 主从复制数据不一致的解决方法
Mar 18 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
MySQL数据库之内置函数和自定义函数 function
Jun 16 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
建立动态的WML站点(一)
2006/10/09 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
基于php缓存的详解
2013/05/15 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
调整PHP的性能
2013/10/30 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
详解javascript void(0)
2020/07/13 Javascript
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python生成excel的实例代码
2017/11/08 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
贷款承诺书
2015/01/20 职场文书
大学生自荐书范文
2015/03/05 职场文书
通知函格式范文
2015/04/27 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
分析Python list操作为什么会错误
2021/11/17 Python