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 Show Profile
Apr 05 MySQL
MySQL kill不掉线程的原因
May 07 MySQL
52条SQL语句教你性能优化
May 25 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
MySQL实战记录之如何快速定位慢SQL
Mar 23 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySql统计函数COUNT的具体使用详解
Aug 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
JavaScript 变量基础知识
2009/11/07 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
javascript数组的使用
2013/03/28 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
jquery动态添加option示例
2013/12/30 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Python编写一个优美的下载器
2018/04/15 Python
python绘制热力图heatmap
2020/03/23 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
python远程邮件控制电脑升级版
2019/05/23 Python
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
行政助理岗位职责
2013/11/10 职场文书
外国人聘用意向书
2014/04/01 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
班干部演讲稿
2014/04/24 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
Django操作cookie的实现
2021/05/26 Python
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL