1. 程式人生 > >基於MySQL資料庫的連線查詢

基於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;

執行結果:在這裡插入圖片描述