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 相关文章推荐
zabbix监控mysql的实例方法
Jun 02 MySQL
MySQL为id选择合适的数据类型
Jun 07 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
一文弄懂MySQL索引创建原则
Feb 28 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
关于mysql中string和number的转换问题
Jun 14 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 获取百度的热词数据的代码
2012/02/18 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
python中的tcp示例详解
2018/12/09 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python程序输出无内容的解决方式
2020/04/09 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
前台文员岗位职责及工作流程
2013/11/19 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
职业规划实施方案
2014/06/10 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
新娘婚礼致辞
2015/07/27 职场文书
企业文化学习心得体会
2016/01/21 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书