MySQL多表查询讲解

1. 开始之前-- ------------------------------ Table structure for dept-- ----------------------------DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (`did` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',`dname` varchar(60) DEFAULT NULL COMMENT '部门名称',PRIMARY KEY (`did`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ------------------------------ Records of dept-- ----------------------------BEGIN;INSERT INTO `dept` VALUES (1, '研发部');INSERT INTO `dept` VALUES (2, '人事部');INSERT INTO `dept` VALUES (3, '测试部');INSERT INTO `dept` VALUES (4, '销售部');INSERT INTO `dept` VALUES (5, '生产部');COMMIT;-- ------------------------------ Table structure for employee-- ----------------------------DROP TABLE IF EXISTS `employee`;CREATE TABLE `employee` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(60) NOT NULL COMMENT '姓名',`age` tinyint(4) DEFAULT NULL COMMENT '年龄',`sex` tinyint(2) NOT NULL DEFAULT '1' COMMENT '性别,1男,2女',`salary` decimal(10,2) NOT NULL COMMENT '薪资',`hire_date` date NOT NULL COMMENT '聘用日期',`dept_id` int(11) DEFAULT NULL COMMENT '部门ID',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;-- ------------------------------ Records of employee-- ----------------------------BEGIN;INSERT INTO `employee` VALUES (1, '菜虚鲲', 20, 2, 10000.00, '2020-01-10', 1);INSERT INTO `employee` VALUES (2, '奥力给', 30, 1, 18000.00, '2020-01-08', 1);INSERT INTO `employee` VALUES (3, '老八', 28, 1, 7000.00, '2020-01-07', 1);INSERT INTO `employee` VALUES (4, '小张', 25, 1, 8000.00, '2020-01-10', 1);INSERT INTO `employee` VALUES (5, '小红', 20, 2, 6000.00, '2020-01-05', 2);INSERT INTO `employee` VALUES (6, '小丽', 23, 2, 6500.00, '2020-01-05', 2);INSERT INTO `employee` VALUES (7, '小花', 21, 2, 5500.00, '2020-01-10', 2);INSERT INTO `employee` VALUES (8, '马小跳', 25, 1, 7000.00, '2020-01-01', 3);INSERT INTO `employee` VALUES (9, '张大骚', 30, 1, 9000.00, '2020-01-07', 3);INSERT INTO `employee` VALUES (10, '马冬梅', 31, 2, 5000.00, '2020-01-07', 4);INSERT INTO `employee` VALUES (11, '川坚果', 60, 1, 100.00, '2020-01-08', NULL);COMMIT;2. 多表联合查询2.1 语法select 字段1,字段2... from 表1,表2... [where 条件]2.2 实战注意:多表联合查询需要添加条件,否则会直接输出 左表*右表,这种结果称之为笛卡尔乘积 。

MySQL多表查询讲解

文章插图
 
集合A中的数据乘以集合B中的数据等于笛卡尔乘积
MySQL> select * from employee,dept;+----+-----------+-----+-----+----------+------------+---------+-----+-----------+| id | name| age | sex | salary| hire_date| dept_id | did | dname|+----+-----------+-----+-----+----------+------------+---------+-----+-----------+|1 | 菜虚鲲 |20 |2 | 10000.00 | 2020-01-10 |1 |1 | 研发部 ||1 | 菜虚鲲 |20 |2 | 10000.00 | 2020-01-10 |1 |2 | 人事部 ||1 | 菜虚鲲 |20 |2 | 10000.00 | 2020-01-10 |1 |3 | 测试部 ||1 | 菜虚鲲 |20 |2 | 10000.00 | 2020-01-10 |1 |4 | 销售部 ||1 | 菜虚鲲 |20 |2 | 10000.00 | 2020-01-10 |1 |5 | 生产部 ||2 | 奥力给 |30 |1 | 18000.00 | 2020-01-08 |1 |1 | 研发部 ||2 | 奥力给 |30 |1 | 18000.00 | 2020-01-08 |1 |2 | 人事部 ||2 | 奥力给 |30 |1 | 18000.00 | 2020-01-08 |1 |3 | 测试部 ||2 | 奥力给 |30 |1 | 18000.00 | 2020-01-08 |1 |4 | 销售部 ||2 | 奥力给 |30 |1 | 18000.00 | 2020-01-08 |1 |5 | 生产部 ||3 | 老八|28 |1 | 7000.00| 2020-01-07 |1 |1 | 研发部 ||3 | 老八|28 |1 | 7000.00| 2020-01-07 |1 |2 | 人事部 ||3 | 老八|28 |1 | 7000.00| 2020-01-07 |1 |3 | 测试部 ||3 | 老八|28 |1 | 7000.00| 2020-01-07 |1 |4 | 销售部 ||3 | 老八|28 |1 | 7000.00| 2020-01-07 |1 |5 | 生产部 ||4 | 小张|25 |1 | 8000.00| 2020-01-10 |1 |1 | 研发部 ||4 | 小张|25 |1 | 8000.00| 2020-01-10 |1 |2 | 人事部 ||4 | 小张|25 |1 | 8000.00| 2020-01-10 |1 |3 | 测试部 ||4 | 小张|25 |1 | 8000.00| 2020-01-10 |1 |4 | 销售部 ||4 | 小张|25 |1 | 8000.00| 2020-01-10 |1 |5 | 生产部 ||5 | 小红|20 |2 | 6000.00| 2020-01-05 |2 |1 | 研发部 ||5 | 小红|20 |2 | 6000.00| 2020-01-05 |2 |2 | 人事部 ||5 | 小红|20 |2 | 6000.00| 2020-01-05 |2 |3 | 测试部 ||5 | 小红|20 |2 | 6000.00| 2020-01-05 |2 |4 | 销售部 ||5 | 小红|20 |2 | 6000.00| 2020-01-05 |2 |5 | 生产部 ||6 | 小丽|23 |2 | 6500.00| 2020-01-05 |2 |1 | 研发部 ||6 | 小丽|23 |2 | 6500.00| 2020-01-05 |2 |2 | 人事部 ||6 | 小丽|23 |2 | 6500.00| 2020-01-05 |2 |3 | 测试部 ||6 | 小丽|23 |2 | 6500.00| 2020-01-05 |2 |4 | 销售部 ||6 | 小丽|23 |2 | 6500.00| 2020-01-05 |2 |5 | 生产部 ||7 | 小花|21 |2 | 5500.00| 2020-01-10 |2 |1 | 研发部 ||7 | 小花|21 |2 | 5500.00| 2020-01-10 |2 |2 | 人事部 ||7 | 小花|21 |2 | 5500.00| 2020-01-10 |2 |3 | 测试部 ||7 | 小花|21 |2 | 5500.00| 2020-01-10 |2 |4 | 销售部 ||7 | 小花|21 |2 | 5500.00| 2020-01-10 |2 |5 | 生产部 ||8 | 马小跳 |25 |1 | 7000.00| 2020-01-01 |3 |1 | 研发部 ||8 | 马小跳 |25 |1 | 7000.00| 2020-01-01 |3 |2 | 人事部 ||8 | 马小跳 |25 |1 | 7000.00| 2020-01-01 |3 |3 | 测试部 ||8 | 马小跳 |25 |1 | 7000.00| 2020-01-01 |3 |4 | 销售部 ||8 | 马小跳 |25 |1 | 7000.00| 2020-01-01 |3 |5 | 生产部 ||9 | 张大骚 |30 |1 | 9000.00| 2020-01-07 |3 |1 | 研发部 ||9 | 张大骚 |30 |1 | 9000.00| 2020-01-07 |3 |2 | 人事部 ||9 | 张大骚 |30 |1 | 9000.00| 2020-01-07 |3 |3 | 测试部 ||9 | 张大骚 |30 |1 | 9000.00| 2020-01-07 |3 |4 | 销售部 ||9 | 张大骚 |30 |1 | 9000.00| 2020-01-07 |3 |5 | 生产部 || 10 | 马冬梅 |31 |2 | 5000.00| 2020-01-07 |4 |1 | 研发部 || 10 | 马冬梅 |31 |2 | 5000.00| 2020-01-07 |4 |2 | 人事部 || 10 | 马冬梅 |31 |2 | 5000.00| 2020-01-07 |4 |3 | 测试部 || 10 | 马冬梅 |31 |2 | 5000.00| 2020-01-07 |4 |4 | 销售部 || 10 | 马冬梅 |31 |2 | 5000.00| 2020-01-07 |4 |5 | 生产部 || 11 | 川坚果 |60 |1 | 100.00| 2020-01-08 | NULL|1 | 研发部 || 11 | 川坚果 |60 |1 | 100.00| 2020-01-08 | NULL|2 | 人事部 || 11 | 川坚果 |60 |1 | 100.00| 2020-01-08 | NULL|3 | 测试部 || 11 | 川坚果 |60 |1 | 100.00| 2020-01-08 | NULL|4 | 销售部 || 11 | 川坚果 |60 |1 | 100.00| 2020-01-08 | NULL|5 | 生产部 |+----+-----------+-----+-----+----------+------------+---------+-----+-----------+55 rows in set (0.00 sec)


推荐阅读