使用MySQL实现两个表的联合查询
在实际的数据库应用中,我们往往需要查询关联或者交集的数据,这时候就需要用到联合查询。MySQL支持使用UNION操作符对两个或多个表进行联合查询。
下面以一个图书库存和销售记录的查询为例,介绍如何使用MySQL实现联合查询。
创建两个表:
库存表:
CREATE TABLE `stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`publishing` varchar(255) NOT NULL,
`count` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
销售表:
CREATE TABLE `sale` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`publishing` varchar(255) NOT NULL,
`count` int(11) NOT NULL,
`sale_date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
然后,往两个表中插入一些数据:
库存表:
INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ‘100’);
INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘Java编程思想’, ‘李四’, ‘机械工业出版社’, ‘200’);
INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ‘150’);
销售表:
INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ’50’, ‘2020-10-01’);
INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ’30’, ‘2020-10-05’);
INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Java编程思想’, ‘李四’, ‘机械工业出版社’, ’80’, ‘2020-10-02’);
INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ’60’, ‘2020-10-03’);
INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ’30’, ‘2020-10-07’);
接下来,使用UNION操作符对两个表进行联合查询:
SELECT book_name, author, publishing, SUM(count) AS total_count
FROM (
SELECT book_name, author, publishing, count FROM `stock`
UNION ALL
SELECT book_name, author, publishing, count FROM `sale`
) AS tmp_table
GROUP BY book_name, author, publishing
ORDER BY total_count DESC;
这条SQL语句执行的结果如下:
+——————–+——–+——————-+————-+
| book_name | author | publishing | total_count |
+——————–+——–+——————-+————-+
| MySQL从入门到精通 | 张三 | 人民邮电出版社 | 120 |
| Python编程入门 | 王五 | 清华大学出版社 | 120 |
| Java编程思想 | 李四 | 机械工业出版社 | 80 |
+——————–+——–+——————-+————-+
可以看到,这条SQL语句对库存表和销售表进行了联合查询,并按照书名、作者、出版社分组,计算了总库存和总销售量。按照总销售量倒序排列,返回了结果集。
通过本文的介绍,相信大家已经了解了如何使用MySQL实现两个表的联合查询。笔者建议读者可以根据自己的实际需求,自行尝试使用UNION操作符进行查询,以更好地理解其原理和应用。