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连接查询福

连接查询:将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)。

连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表.

连接查询的分类: 交叉连接、内连接、外连接

1、交叉连接

1.1、交叉连接:

交叉连接: cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而连接本身字段就会增加(保留),最终形成的结果叫做: 笛卡尔积。基本用到的很少。

mysql> select * from tb_goods;
+----+--------------+-----------+
| id | name         | parent_id |
+----+--------------+-----------+
|  1 | 家用电器     |         0 |
|  2 | 大家电       |         1 |
|  3 | 电脑         |         2 |
|  4 | 铅笔         |         0 |
|  5 | 耳机         |         4 |
|  6 | 可乐         |         3 |
+----+--------------+-----------+
6 rows in set (0.00 sec)

mysql> select * from ying;
+------------+-----+
| id         | age |
+------------+-----+
| 0000000032 |   0 |
| 0000000444 |   0 |
| 0000333333 |   0 |
| 0000000033 |   3 |
+------------+-----+
4 rows in set (0.00 sec)

mysql> select * from tb_goods cross join ying;(在MySQL中cross joininner join其实是一样的,所以select * from tb_goods inner join ying也是同样的效果)
+----+--------------+-----------+------------+-----+
| id | name         | parent_id | id         | age |
+----+--------------+-----------+------------+-----+
|  1 | 家用电器     |         0 | 0000000032 |   0 |
|  1 | 家用电器     |         0 | 0000000444 |   0 |
|  1 | 家用电器     |         0 | 0000333333 |   0 |
|  1 | 家用电器     |         0 | 0000000033 |   3 |
|  2 | 大家电       |         1 | 0000000032 |   0 |
|  2 | 大家电       |         1 | 0000000444 |   0 |
|  2 | 大家电       |         1 | 0000333333 |   0 |
|  2 | 大家电       |         1 | 0000000033 |   3 |
|  3 | 电脑         |         2 | 0000000032 |   0 |
|  3 | 电脑         |         2 | 0000000444 |   0 |
|  3 | 电脑         |         2 | 0000333333 |   0 |
|  3 | 电脑         |         2 | 0000000033 |   3 |
|  4 | 铅笔         |         0 | 0000000032 |   0 |
|  4 | 铅笔         |         0 | 0000000444 |   0 |
|  4 | 铅笔         |         0 | 0000333333 |   0 |
|  4 | 铅笔         |         0 | 0000000033 |   3 |
|  5 | 耳机         |         4 | 0000000032 |   0 |
|  5 | 耳机         |         4 | 0000000444 |   0 |
|  5 | 耳机         |         4 | 0000333333 |   0 |
|  5 | 耳机         |         4 | 0000000033 |   3 |
|  6 | 可乐         |         3 | 0000000032 |   0 |
|  6 | 可乐         |         3 | 0000000444 |   0 |
|  6 | 可乐         |         3 | 0000333333 |   0 |
|  6 | 可乐         |         3 | 0000000033 |   3 |
+----+--------------+-----------+------------+-----+
24 rows in set (0.00 sec)

2、内连接

内连接: [inner] join, 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

基本语法:select * from tb_name1 inner join tb_name2 on tb_name.id = tb_name2.id; on表示连接条件: 条件字段就是代表相同的业务含义,如果没有on条件就是笛卡尔乘积,on可以使用where来代替,但是这样效率会比较低

mysql> select * from tt1;
+----+-------+--------+
| id | name  | gender |
+----+-------+--------+
|  1 | xiong |      0 |
|  2 | ying  |      0 |
|  3 | cai   |      0 |
|  4 | zhang |      0 |
|  5 | li    |      1 |
|  6 | wang  |      1 |
+----+-------+--------+
6 rows in set (0.00 sec)

mysql> select * from tt2;
+----+------+------+--------+
| id | age  | name | gender |
+----+------+------+--------+
|  1 |   23 | a    |      1 |
|  2 |   24 | b    |      1 |
|  3 |   33 | c    |      2 |
|  4 |   43 | d    |      2 |
|  5 |   11 | d    |      2 |
+----+------+------+--------+
5 rows in set (0.00 sec)

mysql> select * from tt2 inner join tt1 on tt1.gender = tt2.gender;
+----+------+------+--------+----+------+--------+
| id | age  | name | gender | id | name | gender |
+----+------+------+--------+----+------+--------+
|  1 |   23 | a    |      1 |  5 | li   |      1 |
|  2 |   24 | b    |      1 |  5 | li   |      1 |
|  1 |   23 | a    |      1 |  6 | wang |      1 |
|  2 |   24 | b    |      1 |  6 | wang |      1 |
+----+------+------+--------+----+------+--------+
4 rows in set (0.00 sec)

3、外连接:

以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能匹配,正确保留; 不能匹配,其他表的字段都置空NULL

1.3.1、左外连接 left join:以左表为主

mysql> select * from tt1;
+----+-------+--------+
| id | name  | gender |
+----+-------+--------+
|  1 | xiong |      0 |
|  2 | ying  |      0 |
|  3 | cai   |      0 |
|  4 | zhang |      0 |
|  5 | li    |      1 |
|  6 | wang  |      1 |
+----+-------+--------+
6 rows in set (0.00 sec)

mysql> select * from tt2;
+----+------+------+--------+
| id | age  | name | gender |
+----+------+------+--------+
|  1 |   23 | a    |      1 |
|  2 |   24 | b    |      1 |
|  3 |   33 | c    |      2 |
|  4 |   43 | d    |      2 |
|  5 |   11 | d    |      2 |
+----+------+------+--------+
5 rows in set (0.00 sec)
mysql> select * from tt2 left join tt1 on tt1.gender = tt2.gender;
+----+------+------+--------+------+------+--------+
| id | age  | name | gender | id   | name | gender |
+----+------+------+--------+------+------+--------+
|  1 |   23 | a    |      1 |    5 | li   |      1 |
|  2 |   24 | b    |      1 |    5 | li   |      1 |
|  1 |   23 | a    |      1 |    6 | wang |      1 |
|  2 |   24 | b    |      1 |    6 | wang |      1 |
|  3 |   33 | c    |      2 | NULL | NULL |   NULL |
|  4 |   43 | d    |      2 | NULL | NULL |   NULL |
|  5 |   11 | d    |      2 | NULL | NULL |   NULL |
+----+------+------+--------+------+------+--------+
7 rows in set (0.00 sec)

3、右外连接 left join:以右表为主

mysql> select * from tt1;
+----+-------+--------+
| id | name  | gender |
+----+-------+--------+
|  1 | xiong |      0 |
|  2 | ying  |      0 |
|  3 | cai   |      0 |
|  4 | zhang |      0 |
|  5 | li    |      1 |
|  6 | wang  |      1 |
+----+-------+--------+
6 rows in set (0.00 sec)

mysql> select * from tt2;
+----+------+------+--------+
| id | age  | name | gender |
+----+------+------+--------+
|  1 |   23 | a    |      1 |
|  2 |   24 | b    |      1 |
|  3 |   33 | c    |      2 |
|  4 |   43 | d    |      2 |
|  5 |   11 | d    |      2 |
+----+------+------+--------+
5 rows in set (0.00 sec)
mysql> select * from tt2 right join tt1 on tt1.gender = tt2.gender;
+------+------+------+--------+----+-------+--------+
| id   | age  | name | gender | id | name  | gender |
+------+------+------+--------+----+-------+--------+
|    1 |   23 | a    |      1 |  5 | li    |      1 |
|    1 |   23 | a    |      1 |  6 | wang  |      1 |
|    2 |   24 | b    |      1 |  5 | li    |      1 |
|    2 |   24 | b    |      1 |  6 | wang  |      1 |
| NULL | NULL | NULL |   NULL |  1 | xiong |      0 |
| NULL | NULL | NULL |   NULL |  2 | ying  |      0 |
| NULL | NULL | NULL |   NULL |  3 | cai   |      0 |
| NULL | NULL | NULL |   NULL |  4 | zhang |      0 |
+------+------+------+--------+----+-------+--------+
8 rows in set (0.00 sec)
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:41:02  更:2022-02-01 20:41:28 
 
开发: 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/24 14:11:27-

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