IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL连接操作 -> 正文阅读

[大数据]MySQL连接操作

MySQL 连接可分为内连接、外连接和自然连接,外连接又分为左连接和右连接。

1. 内连接

可以通过 inner join 关键字或通过逗号分隔多张表来实现内连接操作。

当不指定连接条件时,内连接的结果是输入表的笛卡尔积。

输入表:

MariaDB [mydb]> select * from t1;
+------+------+------+
| c1   | c2   | c3   |
+------+------+------+
|    1 |    2 |    3 |
|    4 |    5 |    6 |
+------+------+------+
2 rows in set (0.00 sec)

MariaDB [mydb]> select * from t2;
+------+------+------+
| c1   | c2   | c4   |
+------+------+------+
|   10 |   20 |   40 |
|   40 |   50 |   70 |
+------+------+------+
2 rows in set (0.00 sec)

内连接:

MariaDB [mydb]> select * from t1 inner join t2;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |   10 |   20 |   40 |
|    4 |    5 |    6 |   10 |   20 |   40 |
|    1 |    2 |    3 |   40 |   50 |   70 |
|    4 |    5 |    6 |   40 |   50 |   70 |
+------+------+------+------+------+------+
4 rows in set (0.00 sec)
MariaDB [mydb]> select * from t1, t2;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |   10 |   20 |   40 |
|    4 |    5 |    6 |   10 |   20 |   40 |
|    1 |    2 |    3 |   40 |   50 |   70 |
|    4 |    5 |    6 |   40 |   50 |   70 |
+------+------+------+------+------+------+
4 rows in set (0.00 sec)

可以通过 on 从句来指定连接条件:

MariaDB [mydb]> select * from t1 inner join t2 on t2.c1=t1.c1*10;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |   10 |   20 |   40 |
|    4 |    5 |    6 |   40 |   50 |   70 |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)

on 指定如何连接表,where 限定哪些行可以进入结果集。

using 从句指定的多个列必须存在于每个输入表中,连接时会比较对应的列,值相等时才会连接。

MariaDB [mydb]> insert into t2 values (1, 2, 40);
Query OK, 1 row affected (0.00 sec)

MariaDB [mydb]> select * from t1 inner join t2 using(c1, c2);
+------+------+------+------+
| c1   | c2   | c3   | c4   |
+------+------+------+------+
|    1 |    2 |    3 |   40 |
+------+------+------+------+
1 row in set (0.00 sec)

2. 外连接

在执行左连接时,如果右表不存在使条件成立的行,则该行所有列将被设为 NULL(右连接类似)。同样的情况在内连接中,则是不连接该行。

MariaDB [mydb]> select * from t1 left join t2 on t1.c1=t2.c1;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |    1 |    2 |   40 |
|    4 |    5 |    6 | NULL | NULL | NULL |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)

MariaDB [mydb]> select * from t1 inner join t2 on t1.c1=t2.c1;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |    1 |    2 |   40 |
+------+------+------+------+------+------+
1 row in set (0.00 sec)

左连接过程中,左表的每一行会根据指定的条件与右表的每一行进行比较,如果条件成立,则连接它们;如果右表中不存在使条件成立的行,则左表的该行会与所有列设都为 NULL 的行进行连接。

MariaDB [mydb]> insert into t2 values (1, 2, 80);
Query OK, 1 row affected (0.00 sec)

MariaDB [mydb]> select * from t1 left join t2 on t1.c1=t2.c1;
+------+------+------+------+------+------+
| c1   | c2   | c3   | c1   | c2   | c4   |
+------+------+------+------+------+------+
|    1 |    2 |    3 |    1 |    2 |   40 |
|    1 |    2 |    3 |    1 |    2 |   80 |
|    4 |    5 |    6 | NULL | NULL | NULL |
+------+------+------+------+------+------+
3 rows in set (0.00 sec)

左连接结果集的行数至少等于左表的行数。

3. 自然连接

natural join/natural left join 等价于 inner join/left join 中使用 using 指定输入表中所有共同存在的列。

MariaDB [mydb]> select * from t1 natural join t2;
+------+------+------+------+
| c1   | c2   | c3   | c4   |
+------+------+------+------+
|    1 |    2 |    3 |   40 |
|    1 |    2 |    3 |   80 |
+------+------+------+------+
2 rows in set (0.00 sec)

MariaDB [mydb]> select * from t1 inner join t2 using(c1, c2);
+------+------+------+------+
| c1   | c2   | c3   | c4   |
+------+------+------+------+
|    1 |    2 |    3 |   40 |
|    1 |    2 |    3 |   80 |
+------+------+------+------+
2 rows in set (0.00 sec)
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:09:35  更:2021-10-03 17:10:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:38:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码