測試必備的Mysql常用sql語句系列
https://www.cnblogs.com/poloyy/category/1683347.html
前言
- 實際工作中,每次查詢基本都是需要結合多個表去查詢資料,是以Mysql的多表查詢我們必須掌握
- 多表查詢可以是兩張表,也可以是很多張表,取決于需要查詢的資料要關聯多少張表
有哪些多表查詢
- cross join:交叉連接配接
- inner join:内連接配接
- left join:左外連接配接
- right join:右外連接配接
- union、union all:全連接配接
多表查詢的差別
查詢類型 | 簡述 | 圖表 |
inner join | 擷取兩個表中字段互相比對關系的記錄 即兩表記錄都不為null才會傳回 | ![]() |
left join | 擷取左表所有記錄 右表為空的字段補null | |
right join | 擷取右表所有記錄 左表為空的字段補null | |
union | 擷取左右表所有記錄 | |
cross join | 兩張表的笛卡爾積 |
執行SQL
後面詳細講每種多表查詢的時候,會用到這些資料表和資料;先跑一跑建立下哦!
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`id` int(11) NOT NULL COMMENT '員工編号',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '員工姓名',
`dept_id` int(11) NULL DEFAULT NULL COMMENT '部門編号',
`leader` int(11) NULL DEFAULT NULL COMMENT '直屬上司id',
`is_enable` int(11) NULL DEFAULT NULL COMMENT '是否在職 1在職 0離職',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
INSERT INTO `emp` VALUES (1, '張三豐', 1, 0, 1);
INSERT INTO `emp` VALUES (2, '張無忌', 1, 1, 1);
INSERT INTO `emp` VALUES (3, '小龍女', 1, 1, 1);
INSERT INTO `emp` VALUES (4, '白菜', 1, 3, 1);
INSERT INTO `emp` VALUES (5, '韋小寶', 2, 0, 1);
INSERT INTO `emp` VALUES (6, '令狐沖', 2, 0, 1);
INSERT INTO `emp` VALUES (7, '東方不敗', 0, 8, 1);
INSERT INTO `emp` VALUES (8, '任我行', 3, 0, 1);
INSERT INTO `emp` VALUES (9, '李尋歡', 0, 8, 1);
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`id` int(11) NOT NULL COMMENT '部門id',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部門名稱',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
INSERT INTO `dept` VALUES (1, '銷售部');
INSERT INTO `dept` VALUES (2, '資訊技術部');
INSERT INTO `dept` VALUES (3, '财務部');
INSERT INTO `dept` VALUES (4, '有關部門');