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 相关文章推荐
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
详解MySQL事务的隔离级别与MVCC
Apr 22 MySQL
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
MYSQL如何查看操作日志详解
May 30 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无限分类的深入理解
2013/06/02 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
php-fpm中max_children的配置
2019/03/15 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
layui清空,重置表单数据的实例
2019/09/12 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
Python与Redis的连接教程
2015/04/22 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
利用Python破解验证码实例详解
2016/12/08 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
用Python解决x的n次方问题
2019/02/08 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
社区母亲节活动方案
2014/03/05 职场文书
三年级学生评语
2014/04/23 职场文书
高中班主任评语
2014/12/30 职场文书
委托书格式要求
2015/01/28 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
Win11开始菜单添加休眠选项
2022/04/19 数码科技