笔者的MySql学习之旅
admin
2023-04-19 00:43:01
0

下文内容主要给大家带来笔者的MySql学习之旅,这里所讲到的知识,与书籍略有不同,都是专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。

前提:创建两个关系表:

 CREATE TABLE t_blog(
        id INT PRIMARY KEY AUTO_INCREMENT,
        title VARCHAR(50),
        typeId INT
);
CREATE TABLE t_type(
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(20)
);

表数据如下:

笔者的MySql学习之旅

笔者的MySql学习之旅


1、获取A、B公有部分

笔者的MySql学习之旅

MySql提供一种内连接的方式来获取A、B两表中均符合on表达式的数据:

mysql> select * from t_blog b inner join t_type t on b.typeId = t.id;
+----+-------------------+--------+----+-------+
| id | title             | typeId | id | name  |
+----+-------------------+--------+----+-------+
|  1 | java基础类型      |      1 |  1 | JAVA  |
|  2 | java编程思想      |      1 |  1 | JAVA  |
|  3 | java从入门到放弃  |      1 |  1 | JAVA  |
|  4 | C语言精讲         |      2 |  2 | C     |
|  5 | C语言从入门到放弃 |      2 |  2 | C     |
|  6 | mysql基础         |      4 |  4 | MYSQL |
+----+-------------------+--------+----+-------+
6 rows in set

通过内连接,blog中的"图解http"数据和type表中的"C++"数据都被过滤

2、A的独有及AB共有

笔者的MySql学习之旅

使用左外连获取A所有的数据,筛选出B表中符合on表达式的数据,不符合的数据B表相应字段补NULL

mysql> select * from t_blog b left join t_type t on b.typeId = t.id;
+----+-------------------+--------+------+-------+
| id | title             | typeId | id   | name  |
+----+-------------------+--------+------+-------+
|  1 | java基础类型      |      1 |    1 | JAVA  |
|  2 | java编程思想      |      1 |    1 | JAVA  |
|  3 | java从入门到放弃  |      1 |    1 | JAVA  |
|  4 | C语言精讲         |      2 |    2 | C     |
|  5 | C语言从入门到放弃 |      2 |    2 | C     |
|  6 | mysql基础         |      4 |    4 | MYSQL |
|  7 | 图解http          | NULL   | NULL | NULL  |
+----+-------------------+--------+------+-------+
7 rows in set

通过左外连,左表中所有的数据都被查询出来,右表独有的"C++"数据被过滤,左表独有的"图解http"数据的右表位置补了NULL。

3、B独有及AB共有

同上,使用右外连,过滤掉A表中不符合on条件的数据,查询出所有B表中的数据,A表不满足的字段会补NULL;

mysql> select * from t_blog b right join t_type t on b.typeId = t.id;
+------+-------------------+--------+----+-------+
| id   | title             | typeId | id | name  |
+------+-------------------+--------+----+-------+
|    1 | java基础类型      |      1 |  1 | JAVA  |
|    2 | java编程思想      |      1 |  1 | JAVA  |
|    3 | java从入门到放弃  |      1 |  1 | JAVA  |
|    4 | C语言精讲         |      2 |  2 | C     |
|    5 | C语言从入门到放弃 |      2 |  2 | C     |
| NULL | NULL              | NULL   |  3 | C++   |
|    6 | mysql基础         |      4 |  4 | MYSQL |
+------+-------------------+--------+----+-------+
7 rows in set

通过右外连,右表中的数据全部被查出,独有的"C++"数据左表位置补了NULL,过滤掉左表的"图解http"数据

4、A独有

笔者的MySql学习之旅

已知通过左外连,会得到A的独有及AB共有,在A的独有部分,B表位置会补NULL,也就是说,左外连结果中B为NULL的数据就是A的独有

mysql> select * from t_blog b left join t_type t on b.typeId = t.id where t.name is null;
+----+----------+--------+------+------+
| id | title    | typeId | id   | name |
+----+----------+--------+------+------+
|  7 | 图解http | NULL   | NULL | NULL |
+----+----------+--------+------+------+
1 row in set

5、B独有

同上,右外连会获取B 的独有及AB共有,在B独有部分,A表位置会补NULL,也就是说左外连结果中A表为NULL的数据就是B的独有

mysql> select * from t_blog b right join t_type t on b.typeId = t.id where b.title is null;
+------+-------+--------+----+------+
| id   | title | typeId | id | name |
+------+-------+--------+----+------+
| NULL | NULL  | NULL   |  3 | C++  |
+------+-------+--------+----+------+
1 row in set

6、求并集

笔者的MySql学习之旅

MySql中提供"union"命令求并集,并且自动去重。如果对面表没有匹配,则补NULL

mysql> select * from t_blog b left join t_type t on b.typeId = t.id
    -> union
    -> select * from t_blog b right join t_type t on b.typeId = t.id;
+------+-------------------+--------+------+-------+
| id   | title             | typeId | id   | name  |
+------+-------------------+--------+------+-------+
|    1 | java基础类型      |      1 |    1 | JAVA  |
|    2 | java编程思想      |      1 |    1 | JAVA  |
|    3 | java从入门到放弃  |      1 |    1 | JAVA  |
|    4 | C语言精讲         |      2 |    2 | C     |
|    5 | C语言从入门到放弃 |      2 |    2 | C     |
|    6 | mysql基础         |      4 |    4 | MYSQL |
|    7 | 图解http          | NULL   | NULL | NULL  |
| NULL | NULL              | NULL   |    3 | C++   |
+------+-------------------+--------+------+-------+
8 rows in set

7、求差集

笔者的MySql学习之旅

所谓差集就是A的独有和B 的独有的并集

mysql> select * from t_blog b left join t_type t on b.typeId = t.id where t.name is null
    -> union
    -> select * from t_blog b right join t_type t on b.typeId = t.id where b.title is null;
+------+----------+--------+------+------+
| id   | title    | typeId | id   | name |
+------+----------+--------+------+------+
|    7 | 图解http | NULL   | NULL | NULL |
| NULL | NULL     | NULL   |    3 | C++  |
+------+----------+--------+------+------+
2 rows in set

对于以上关于笔者的MySql学习之旅,如果大家还有更多需要了解的可以持续关注我们的行业推新,如需获取专业解答,可在官网联系售前售后的,希望该文章可给大家带来一定的知识更新。

相关内容

热门资讯

苏州率先打造数据流通利用新范式 数据,作为第五大生产要素 具有流动性强、非消耗性、非均质性等特点 苏州率先打造数据流通利用新范式 夯...
伊媒披露伊美新一轮谈判5个先决... 当地时间5月12日,据伊朗法尔斯通讯社援引知情人士消息报道,伊朗对与美国新一轮谈判提出的5个先决条件...
英国将向霍尔木兹海峡多国护航行... 当地时间12日,总台记者从英国国防部获悉,英国将向在霍尔木兹海峡执行任务的多国护航行动提供无人机、战...
强化技术引领场景培育政策保障 ... 5月11日,省长叶建春就脑机接口技术与产业创新工作开展专题调研。他强调,脑机接口是培育未来产业发展新...
上海交大王如竹教授领衔撰写的“... 4月30日,国际制冷学会(IIR,International Institute of Refrig...
非人类身份蔓延:智能体AI真正... 长期以来,企业依赖服务账户、API密钥、OAuth令牌等各类非人类身份凭证,使不同服务能够在数字环境...
脑机接口“狂飙” 从病房走向多... (记者 陈锦锋)当大脑的神经信号能够直接与外部设备对话,“心想事成”便从科幻走向现实。近日,中南大学...
中巴外长通话,王毅:希望巴方保... 2026年5月12日晚,中共中央政治局委员、外交部长王毅同巴基斯坦副总理兼外长达尔通电话。达尔介绍了...
美参议院投票批准凯文·沃什出任... △凯文·沃什(资料图)当地时间5月12日,美国参议院投票批准凯文·沃什出任美联储主席,目前相关投票程...
缺油!日本快撑不住了 日本零食巨头卡乐比为节省油墨竟将原本漂亮的包装改成了黑白两色,从“喜食”变得看上去像“丧食”。日本石...