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 EXPLAIN输出列的详细解释
May 12 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
Mysql文件存储图文详解
Jun 01 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
MySQL数据库 任意ip连接方法
May 20 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
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
js计数器代码
2006/11/04 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
安康杯竞赛活动总结
2014/05/05 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
检讨书范文500字
2015/01/28 职场文书
追讨欠款律师函
2015/05/27 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL