前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文读懂JOIN联合查询

一文读懂JOIN联合查询

作者头像
石的三次方
发布2021-01-05 22:35:07
4530
发布2021-01-05 22:35:07
举报
文章被收录于专栏:石的三次方石的三次方

MySQL查询之JOIN

1. 准备工作

当前表中的数据

代码语言:javascript
复制
mysql> select * from t_dept;
+----+----------+-----------+
| id | deptName | address   |
+----+----------+-----------+
|  1 | 华山     | 华山      |
|  2 | 丐帮     | 洛阳      |
|  3 | 峨眉     | 峨眉山    |
|  4 | 武当     | 武当山    |
|  5 | 明教     | 光明顶    |
|  6 | 少林     | 少林寺    |
+----+----------+-----------+
6 rows in set (0.00 sec)

mysql> select * from t_emp;
+----+--------------+------+--------+--------+
| id | name         | age  | deptId | empno  |
+----+--------------+------+--------+--------+
|  1 | 风清扬       |   90 |      1 | 100001 |
|  2 | 岳不群       |   50 |      1 | 100002 |
|  3 | 令狐冲       |   24 |      1 | 100003 |
|  4 | 洪七公       |   70 |      2 | 100004 |
|  5 | 乔峰         |   35 |      2 | 100005 |
|  6 | 灭绝师太     |   70 |      3 | 100006 |
|  7 | 周芷若       |   20 |      3 | 100007 |
|  8 | 张三丰       |  100 |      4 | 100008 |
|  9 | 张无忌       |   25 |      5 | 100009 |
| 10 | 韦小宝       |   18 |   NULL | 100010 |
+----+--------------+------+--------+--------+
10 rows in set (0.00 sec)

2. 内连接查询

该查询可以查询出A,B中共有数据

代码语言:javascript
复制
mysql> select * from t_dept a inner join t_emp b on a.id= b.deptId;
+----+----------+-----------+----+--------------+------+--------+--------+
| id | deptName | address   | id | name         | age  | deptId | empno  |
+----+----------+-----------+----+--------------+------+--------+--------+
|  1 | 华山     | 华山      |  1 | 风清扬       |   90 |      1 | 100001 |
|  1 | 华山     | 华山      |  2 | 岳不群       |   50 |      1 | 100002 |
|  1 | 华山     | 华山      |  3 | 令狐冲       |   24 |      1 | 100003 |
|  2 | 丐帮     | 洛阳      |  4 | 洪七公       |   70 |      2 | 100004 |
|  2 | 丐帮     | 洛阳      |  5 | 乔峰         |   35 |      2 | 100005 |
|  3 | 峨眉     | 峨眉山    |  6 | 灭绝师太     |   70 |      3 | 100006 |
|  3 | 峨眉     | 峨眉山    |  7 | 周芷若       |   20 |      3 | 100007 |
|  4 | 武当     | 武当山    |  8 | 张三丰       |  100 |      4 | 100008 |
|  5 | 明教     | 光明顶    |  9 | 张无忌       |   25 |      5 | 100009 |
+----+----------+-----------+----+--------------+------+--------+--------+
9 rows in set (0.01 sec)

3. 左连接查询

查询左边表即from的表的全部数据和与右边表的共有数据,此时左边表的私有数据在右边表会被null补全

代码语言:javascript
复制
mysql> select * from t_dept a left join t_emp b on a.id=b.deptId;
+----+----------+-----------+------+--------------+------+--------+--------+
| id | deptName | address   | id   | name         | age  | deptId | empno  |
+----+----------+-----------+------+--------------+------+--------+--------+
|  1 | 华山     | 华山      |    1 | 风清扬       |   90 |      1 | 100001 |
|  1 | 华山     | 华山      |    2 | 岳不群       |   50 |      1 | 100002 |
|  1 | 华山     | 华山      |    3 | 令狐冲       |   24 |      1 | 100003 |
|  2 | 丐帮     | 洛阳      |    4 | 洪七公       |   70 |      2 | 100004 |
|  2 | 丐帮     | 洛阳      |    5 | 乔峰         |   35 |      2 | 100005 |
|  3 | 峨眉     | 峨眉山    |    6 | 灭绝师太     |   70 |      3 | 100006 |
|  3 | 峨眉     | 峨眉山    |    7 | 周芷若       |   20 |      3 | 100007 |
|  4 | 武当     | 武当山    |    8 | 张三丰       |  100 |      4 | 100008 |
|  5 | 明教     | 光明顶    |    9 | 张无忌       |   25 |      5 | 100009 |
|  6 | 少林     | 少林寺    | NULL | NULL         | NULL |   NULL |   NULL |
+----+----------+-----------+------+--------------+------+--------+--------+
10 rows in set (0.00 sec)

4. 右连接查询

查询右边表和左边表的共有数据和右边表的私有数据,左边表在右边表私有数据的体现为null

代码语言:javascript
复制
| deptName | address   | id | name         | age  | deptId | empno  |
+------+----------+-----------+----+--------------+------+--------+--------+
|    1 | 华山     | 华山      |  1 | 风清扬       |   90 |      1 | 100001 |
|    1 | 华山     | 华山      |  2 | 岳不群       |   50 |      1 | 100002 |
|    1 | 华山     | 华山      |  3 | 令狐冲       |   24 |      1 | 100003 |
|    2 | 丐帮     | 洛阳      |  4 | 洪七公       |   70 |      2 | 100004 |
|    2 | 丐帮     | 洛阳      |  5 | 乔峰         |   35 |      2 | 100005 |
|    3 | 峨眉     | 峨眉山    |  6 | 灭绝师太     |   70 |      3 | 100006 |
|    3 | 峨眉     | 峨眉山    |  7 | 周芷若       |   20 |      3 | 100007 |
|    4 | 武当     | 武当山    |  8 | 张三丰       |  100 |      4 | 100008 |
|    5 | 明教     | 光明顶    |  9 | 张无忌       |   25 |      5 | 100009 |
| NULL | NULL     | NULL      | 10 | 韦小宝       |   18 |   NULL | 100010 |
+------+----------+-----------+----+--------------+------+--------+--------+
10 rows in set (0.00 sec)

5. 左外连接查询

查询左边表的私有数据

代码语言:javascript
复制
mysql> select * from t_dept a left join t_emp b on a.id=b.deptId where b.deptId is null;
+----+----------+-----------+------+------+------+--------+-------+
| id | deptName | address   | id   | name | age  | deptId | empno |
+----+----------+-----------+------+------+------+--------+-------+
|  6 | 少林     | 少林寺    | NULL | NULL | NULL |   NULL |  NULL |
+----+----------+-----------+------+------+------+--------+-------+
1 row in set (0.00 sec)

6. 右外连接查询

查询右边表的私有数据

代码语言:javascript
复制
mysql> select * from t_dept a right join t_emp b on a.id=b.deptId where b.deptId is null;
+------+----------+---------+----+-----------+------+--------+--------+
| id   | deptName | address | id | name      | age  | deptId | empno  |
+------+----------+---------+----+-----------+------+--------+--------+
| NULL | NULL     | NULL    | 10 | 韦小宝    |   18 |   NULL | 100010 |
+------+----------+---------+----+-----------+------+--------+--------+
1 row in set (0.01 sec)

7. 全连接查询

查询两张表的所有数据。私有数据通过null来补全

由于mysql不支持full outer所以通过union来连接查询

代码语言:javascript
复制
mysql> select * from t_dept a right join t_emp b on a.id=b.deptId
    -> union
    -> select * from t_dept a left join t_emp b on a.id=b.deptId;
+------+----------+-----------+------+--------------+------+--------+--------+
| id   | deptName | address   | id   | name         | age  | deptId | empno  |
+------+----------+-----------+------+--------------+------+--------+--------+
|    1 | 华山     | 华山      |    1 | 风清扬       |   90 |      1 | 100001 |
|    1 | 华山     | 华山      |    2 | 岳不群       |   50 |      1 | 100002 |
|    1 | 华山     | 华山      |    3 | 令狐冲       |   24 |      1 | 100003 |
|    2 | 丐帮     | 洛阳      |    4 | 洪七公       |   70 |      2 | 100004 |
|    2 | 丐帮     | 洛阳      |    5 | 乔峰         |   35 |      2 | 100005 |
|    3 | 峨眉     | 峨眉山    |    6 | 灭绝师太     |   70 |      3 | 100006 |
|    3 | 峨眉     | 峨眉山    |    7 | 周芷若       |   20 |      3 | 100007 |
|    4 | 武当     | 武当山    |    8 | 张三丰       |  100 |      4 | 100008 |
|    5 | 明教     | 光明顶    |    9 | 张无忌       |   25 |      5 | 100009 |
| NULL | NULL     | NULL      |   10 | 韦小宝       |   18 |   NULL | 100010 |
|    6 | 少林     | 少林寺    | NULL | NULL         | NULL |   NULL |   NULL |
+------+----------+-----------+------+--------------+------+--------+--------+
11 rows in set (0.00 sec)

8. 全外查询

查询两张表中的所有的私有数据

代码语言:javascript
复制
mysql> select * from t_dept a left join t_emp b  on a.id=b.deptId where b.deptId is null
    -> union
    -> select * from t_dept a right join t_emp b on a.id=b.deptId where a.id is null ;
+------+----------+-----------+------+-----------+------+--------+--------+
| id   | deptName | address   | id   | name      | age  | deptId | empno  |
+------+----------+-----------+------+-----------+------+--------+--------+
|    6 | 少林     | 少林寺    | NULL | NULL      | NULL |   NULL |   NULL |
| NULL | NULL     | NULL      |   10 | 韦小宝    |   18 |   NULL | 100010 |
+------+----------+-----------+------+-----------+------+--------+--------+
2 rows in set (0.00 sec)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 石的三次方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL查询之JOIN
    • 1. 准备工作
      • 2. 内连接查询
        • 3. 左连接查询
          • 4. 右连接查询
            • 5. 左外连接查询
              • 6. 右外连接查询
                • 7. 全连接查询
                  • 8. 全外查询
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档