您好,登錄后才能下訂單哦!
下文內容主要給大家帶來筆者的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) );
表數據如下:
1、獲取A、B公有部分
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共有
使用左外連獲取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獨有
已知通過左外連,會得到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中提供"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、求差集
所謂差集就是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學習之旅,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。