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 26 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL配置主从服务器(一主多从)
Aug 07 MySQL
MySQL数据库超时设置配置的方法实例
Oct 15 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
将MySQL的表数据全量导入clichhouse库中
Mar 21 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
Windows 64位 安装 mysql 8.0.28 图文教程
Apr 19 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
jquery easyui如何实现格式化列
2017/07/30 jQuery
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Django对models里的objects的使用详解
2019/08/17 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
详细分析Python collections工具库
2020/07/16 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
旷课检讨书2000字
2014/01/14 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
工作评语大全
2014/04/26 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
购房协议书范本
2014/10/02 职场文书
教师师德师风整改措施
2014/10/24 职场文书
公司搬迁通知
2015/04/20 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers