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外连接与内连接查询的不同之处
Jun 03 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
Nov 17 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
同学聚会通知书
2015/04/20 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Python实战之OpenCV实现猫脸检测
2021/06/26 Python