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

相关内容

热门资讯

“一次愉快的会晤”,泽连斯基披... 在俄乌互相加大对对方纵深目标打击之际,乌克兰总统泽连斯基7月28日造访了白宫,与美国总统特朗普举行会...
总统连遭“逼宫”,少帅临危受命 躲避着燃烧瓶和火箭弹袭击,四辆苏制BMP步兵战车快速穿行在马里乌波尔市区。即将出城的路口,迎面出现1...
独居女子在卧室玩偶内发现摄像头... 租房独居女子意外发现家中玩偶内藏着偷拍设备,报警后偷拍设备竟“不翼而飞”,门锁记录显示有人在她出门的...
伊学者:乌克兰袭击行动适得其反... 乌克兰袭击与伊朗有关的船只后,伊朗和俄罗斯接连作出强硬回应。伊朗外交学院教授法拉吉扎德在接受凤凰卫视...
20万人怒火不会停!蓝议员挺蒋... 海峡导报综合报道 在蓝白号召台湾民众上凯道呐喊“反毒台”后,台北市长蒋万安日前透露,近日不少民代私下...
柯文哲妻子陈佩琪畅游大陆,民进... 台湾民众党前主席柯文哲妻子陈佩琪27日在脸书发文证实,自己早前由儿子陪同前往上海、杭州与北京旅游一周...
高市早苗被问如何改善中日关系 据日本东京新闻报道,当地时间7月27日,日本首相高市早苗在首相官邸举行记者会。当被问及如何改善中日关...
扎哈罗娃批小泉进次郎涉核言论:... 【环球网报道 记者 张江平】综合俄新社等媒体报道,对于日本防卫大臣小泉进次郎涉核言论,俄罗斯外交部发...
“特高课”再现?日本强推“国家... 无视反对战争正义呼声 复刻战前军国主义体制日本强推“国家情报局”引发广泛担忧和批评(国际视点)本报记...
6G相比5G不只是速度更快 将...   6G相比5G不只是速度更快  【6G相比5G不只是速度更快】7月28日,相比5G,6G不仅是速度...