基於MySQL資料庫的連線查詢
用兩個表(a_table、b_table),關聯欄位a_table.a_id和b_table.b_id來演示一下MySQL的內連線、外連線( 左(外)連線、右(外)連線、全(外)連線)。
MySQL版本:mysql5.1.17
管理工具版本:navicat12
資料庫表:a_table、b_table
主題:內連線、左連線(左外連線)、右連線(右外連線)、全連線(全外連線)
**前提
建表語句及相關demo**
DROP TABLE IF EXISTS `a_table`; CREATE TABLE `a_table` ( `a_id` int(11) NULL DEFAULT NULL, `a_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `a_part` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; INSERT INTO `a_table` VALUES (1, '老潘', '總裁部'); INSERT INTO `a_table` VALUES (2, '老王', '祕書部'); INSERT INTO `a_table` VALUES (3, '老張', '設計部'); INSERT INTO `a_table` VALUES (4, '老李', '運營部'); DROP TABLE IF EXISTS `b_table`; CREATE TABLE `b_table` ( `b_id` int(11) NULL DEFAULT NULL, `b_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `b_part` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; INSERT INTO `b_table` VALUES (2, '老王', '祕書部'); INSERT INTO `b_table` VALUES (3, '老張', '設計部'); INSERT INTO `b_table` VALUES (5, '老劉', '人事部'); INSERT INTO `b_table` VALUES (6, '老黃', '生成部');
一、內連線
關鍵字:inner join on
語句:SELECT * FROM a_table a INNER JOIN b_table b WHERE a.a_id = b.b_id;
執行結果:
說明:(WHERE可以換成ON)內連線就是左右倆表的交集
二、左連線(左外連線)
關鍵字:left join on / left outer join on
語句:SELECT * FROM a_table a LEFT JOIN b_table b ON a.a_id = b.b_id;
執行結果:
說明:
left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。
左(外)連線,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜尋條件的記錄。右表記錄不足的地方均為NULL。
三、右連線(右外連線)
關鍵字:right join on / right outer join on
語句:SELECT * FROM a_table a RIGHT JOIN b_table b ON a.a_id = b.b_id;
執行結果:
說明:
right join是right outer join的簡寫,它的全稱是右外連線,是外連線中的一種。
與左(外)連線相反,右(外)連線,左表(a_table)只會顯示符合搜尋條件的記錄,而右表(b_table)的記錄將會全部表示出來。左表記錄不足的地方均為NULL。
四,全外連線查詢
MySQL資料庫不支援全外連線查詢 但是可以通過UNION來實現
關鍵字:union
語句:SELECT * FROM a_table a LEFT JOIN b_table b ON a.a_id = b.b_id UNION SELECT * FROM a_table a RIGHT JOIN b_table b ON a.a_id = b.b_id;
執行結果: