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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
MySQL单表千万级数据处理的思路分享
Jun 05 MySQL
MySQL约束超详解
Sep 04 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 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
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
php浏览历史记录的方法
2015/03/10 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
Python备份Mysql脚本
2008/08/11 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python实现websocket的客户端压力测试
2019/06/25 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
八年级生物教学反思
2014/01/22 职场文书
公司人事管理制度
2015/08/05 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server